differences

Coming from Vim

bi keeps vim’s grammar — counts, operators, motions, text objects, ., :s, :g, ranges — so your fingers already know most of it. This page is the rest: what bi does differently, what it adds, and what is not there yet.

Keys that mean something else

KeyIn vimIn bi
scl spelled shorterjump: type a few characters, press the letter next to the match (lesson) — cl still works
Scc spelled shorterselect by structure: a letter at both ends of every tree-sitter scope around the cursor (lesson) — cc still works
gaprint the character’s code:alt — open the alternate file: .h beside .c, _test.go beside .go
gA—:valt — the alternate file in a vertical split
gfedit the file name under the cursorthe fuzzy file picker over the whole project
gb—the buffer switcher, most recently shown first
ghselect modein the file tree: show dotfiles
Kman the wordwhat the language server knows about the cursor
"p "Ppaste from register popen the picker over every capture, then paste
"nregister nthe named space: capture first, name it after with :yname
"*the primary selectiona spelling of "+ — the system clipboard
Tabsame byte as Ctrl-Ithe same — so it is jump-forward, and never buffer-next
Spacell until a <leader> binding claims it; bi ships <leader><leader> for code actions
-line up, first non-blankout of the file into the file tree
Shift-↓ Shift-↑scroll a pagemove the line or the selected block one row
Ctrl-Nnext lineadd a cursor at the next occurrence (in insert mode: next completion)
Ctrl-Xsubtract from a numberskip this occurrence while adding cursors

Registers are a ring

Vim asks you to choose one of 36 slots at yank time, which is the moment you least know whether something is worth keeping. bi captures every y, d, c and x into a ring 4096 deep and moves the choice to paste time, where "p opens a picker that can search it. Plain p still pastes the newest capture.

vs vim
There are no "a–"z slots and no numbered "1–"9 delete registers. Named registers exist, but you name a capture after taking it: "nyy, then :yname x. "np picks among the names.

The clipboard is explicit: nothing is mirrored to it, because exporting every dd to the desktop is a surprise that cannot be undone. "+y sends over OSC 52, so it works over SSH too.

Windows and buffers

Options

Editing details

What bi adds

Things you would install plugins for in Neovim, already in the binary: tree-sitter with twenty grammars, a language server client with completion and code actions, surround (ys ds cs), comments (gc), multiple cursors, label jumps, pickers, a file tree with copy/move/rename, git signs, project find and replace with a preview, indent guides, TODO highlighting, colour swatches, .editorconfig, encodings and CRLF kept byte-identical, images in terminals that speak the kitty protocol, and text tools like :sort, :align, :case, :base64e, :uuid4 and :jsonfmt.

The Learn section walks through all of it with screenshots.

Not there yet