Keymaps

The keys I use most. The full list is in the repo. Leader is Space.

Moving around

KeyDoes
Ctrl+h/j/k/lMove between Neovim splits and tmux panes, same keys
Shift+l / Shift+hNext / previous open file, in the order the tabs are shown
Ctrl+p / Ctrl+nJump 8 lines up / down
[[ / ]]Start / end of the construct the cursor is in (treesitter)
<leader>n / <leader>pNext / previous occurrence of the word under the cursor
s + letters + labelJump anywhere on screen: type a few letters of the target, then the label that appears there
SSelect the function, block or argument around the cursor
[xJump up to the enclosing function, which stays pinned at the top while you scroll

Editing

KeyDoes
gsa / gsd / gsrAdd / delete / replace surrounding quotes and brackets — gsr"' turns "x" into 'x'
<leader>frFind and replace across the whole project, with a preview of every change
<leader>UUndo history as a tree, including edits plain u can no longer reach
<leader>acSend the file, or the selected code, to Claude in the next tmux pane

Text objects

KeySelects
aq / iqA string with / without its quotes — any quote style, multi-line included
af / ifA function, outer / inner
ac / icA class, outer / inner

Files and projects

KeyDoes
<leader>-Open lf with the cursor already on the current file
<leader>sf / <leader>sgFind files / live grep
<leader>spSwitch project — saves this one's session, restores the next one's
<leader>sPBounce back to the previous project
<leader>gwSwitch to another worktree of this repo, by branch
<leader>gdReview every uncommitted change, side by side, like a pull request
<leader>ghHistory of the current file, commit by commit

Notes

A vault of plain Markdown files in ~/personal/notes, through obsidian.nvim. No Obsidian app needed.

KeyDoes
<leader>on / <leader>otNew note / today's daily note
<leader>of / <leader>osFind a note by name / search inside notes
<leader>obNotes that link to this one
[[Link to another note, with completion

Notebooks

Jupyter notebooks open as Markdown with Python cells, run in a kernel, and save back to .ipynb with their outputs. Optional — one line in the config turns it off.

KeyDoes
<leader>isSet up everything a notebook needs, including a kernel for the project's own venv
<leader>inNew notebook in the current folder, ready to run
<leader>irRun the cell under the cursor, or the selection
<leader>ia / <leader>iARun this cell and every one above / run all cells
<leader>io / <leader>ihOpen / hide the output window

Python REPL

KeyDoes
<leader>rrToggle a Jupyter REPL in a split
<leader>rsSend the statement or block under the cursor and move to the next; in visual mode, send the selection
<leader>roKernel manager: start, stop, rename

tmux

The prefix is Ctrl+Space. Press it twice to send a real Ctrl+Space to the program in the pane. Sessions survive a reboot: they are saved every 10 minutes and come back when tmux starts, with Neovim reopened and Claude continuing its conversation.

KeyDoes
prefix + fPick a project, and open it as a session with editor and terminal side by side
prefix + Ctrl+fSearch the open sessions and switch to one
prefix + TabBack to the last project (Shift-Tab: the last window)
prefix + WOpen another branch as a worktree, in its own session with editor and Claude
prefix + ;Collapse Claude out of sight (it keeps running) / bring it back exactly as it was
prefix + nToday's note in a floating window, from any pane
prefix + t / prefix + gFloating scratch shell / lazygit
prefix + - / prefix + _Split stacked / side by side

Inside lf

KeyCopies
yn / ysFile name / name without extension
yp / ydAbsolute path / containing directory
yrPath relative to the repo root
iRead the whole file in Neovim, read-only, with the usual keys — search, select, copy. q goes back

y is a prefix there, so lf's built-in copy is yy. af / ad create a file / directory, D deletes for good, after listing what will go and asking y/N. Clipboard commands are macOS-only for now (pbcopy).