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

Key In vim In bi
s cl spelled shorter jump: type a few characters, press the letter next to the match (lesson) — cl still works
S cc spelled shorter select by structure: a letter at both ends of every tree-sitter scope around the cursor (lesson) — cc still works
ga print 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
gf edit the file name under the cursor the fuzzy file picker over the whole project
gb the buffer switcher, most recently shown first
gh select mode in the file tree: show dotfiles
K man the word what the language server knows about the cursor
"p "P paste from register p open the picker over every capture, then paste
"n register n the named space: capture first, name it after with :yname
"* the primary selection a spelling of "+ — the system clipboard
Tab same byte as Ctrl-I the same — so it is jump-forward, and never buffer-next
Space l l until a <leader> binding claims it; bi ships <leader><leader> for code actions
- line up, first non-blank out of the file into the file tree
Shift-↓ Shift-↑ scroll a page move the line or the selected block one row
Ctrl-N next line add a cursor at the next occurrence (in insert mode: next completion)
Ctrl-X subtract from a number skip 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