Repository navigation
claudecode.nvim 1.2.0
claudecode-nvim-demo.mp4
Notes you can read over before they go and that go as a diff, review that keeps up with git and with folders of repositories, Claude's notifications in Neovim, and fewer upstream commands that did nothing in this flow.
Upgrading
- Ten upstream commands are gone (see Removed). A mapping of your own to one of them now fails with "Not an editor command"; the list below names what to use instead.
- In a buffer under review
cnow waits for its next key without'timeoutlen'. A key that is not one of the review keys changes text as before:cw,ciw,cc,2cw,"acw. - Shift+Enter in Normal mode, in a file under review or with a note, sends your notes; where no note waits it is Enter.
review.notes.local_send_keymap = falseturns this off. - Claude started from Neovim no longer sends its own desktop notification or bell: its notifications come as
vim.notify. The plugin's settings file setspreferredNotifChannel = "notifications_disabled"for that Claude only; Claude outside Neovim keeps yours. - The highlight group
ClaudeCodeReviewNoteSignis nowClaudeCodeReviewNoteBorder, and the lists useClaudeCodeReviewAddedandClaudeCodeReviewRemoved.
Removed
- Upstream commands the review replaces, or whose work the plugin does on its own. In a proposal
cStakes it all,cXrefuses it and:wanswers with what is there, instead of:ClaudeCodeDiffAccept,:ClaudeCodeDiffDenyand:ClaudeCodeCloseAllDiffs.:ClaudeCodetoggles instead of:ClaudeCodeOpenand:ClaudeCodeClose. The server starts with the plugin and:checkhealth claudecodeshows its state, instead of:ClaudeCodeStart,:ClaudeCodeStopand:ClaudeCodeStatus.:ClaudeCode --modelor Claude's/modelpicks the model instead of:ClaudeCodeSelectModel, and notes send text instead of:ClaudeCodeSendText. The LazyVim spec drops<leader>aaand<leader>ad, anddiff_opts.providerlosesaccept_command.
Added
- Shift+Enter sends your notes from the file, not only from the box. In Normal mode, in a file under review or with a note, Shift+Enter sends every note, as
cRdoes; where no note waits it is Enter, and in neo-tree, quickfix and other lists it stays theirs.review.notes.local_send_keymapsets the key. - A list of your notes.
<leader>anin Normal mode, or:ClaudeCodeReviewNotes, lists every note by file and line before you send them, with the code and the note under it in the preview. Enter opens a note in its box to edit it, and the cursor stays on it after you save;<A-d>deletes it,<C-s>sends them all.review.notes.list_keymapsets the key. - Reject with a reason in Manual mode.
crin a proposal reverts the hunk with what you type, and Claude reworks the place in the same turn. With other hunks kept, the reason goes with the note about your reverts. With every hunk reverted, the plugin answers "No, and tell Claude what to do differently" in Claude's own permission dialog in the terminal, since a rejection over the IDE connection carries no text; if the dialog is not there as expected, the proposal is rejected plainly and the reason goes to the clipboard. - Hunks and notes in the list of files.
<leader>akshows how many hunks and notes wait in each file,+12 -3 3 hunks · 1 note, in columns. A file whose hunks are all decided stays on the list while it has notes and opens at the first one.
Changed
- Claude sees the code of a note as a diff. The message marks what Claude removed with
-, above the line it was removed at, and what it added with+, in adiffblock, so Claude's terminal shows the lines as they are and not as a Markdown list. It used to send only the lines there now, so a note under a deleted comment never told Claude which comment it meant. - Green and red in the lists.
+12is green and-3red in<leader>ak, in snacks.picker and fzf-lua alike.<leader>anshows the same for the hunk under each note, and its preview shows the hunks as the review does. The highlight groups areClaudeCodeReviewAddedandClaudeCodeReviewRemoved. - A saved note stays where you typed it. It used to turn into one gray line,
▎ note: …, cut at the window's edge, and the box you had typed in was gone. Now the box stays, dimmed and without the key hints, up to its ten lines, and fits the window again when a split narrows it. The highlight groupClaudeCodeReviewNoteSigngave way toClaudeCodeReviewNoteBorder.
Fixed
- A change thrown away outside review leaves no notes behind. After
git checkoutor a discard in lazygit the file left the list only at the next hook, and its notes stayed in both lists and the statusline. Now the notes of a file go once Claude's change there is gone, and the lists look at the disk again when a terminal such as lazygit's closes, when Neovim gets the focus back and after a:!command. Aftercsthe notes stay, as before. - A note keeps its line after you save and close its file. The line was written once, when you saved the note, so lines added above it and saved sent the list,
cRand Claude to the old line once the file was closed. Now it follows the file on disk. c, a pause, thensno longer starts Flash. Neovim gave up oncsafter'timeoutlen'(300 ms in LazyVim) and ran the change operator, sosstarted Flash andrRemote Flash, under which-key's "+Change" window. In a buffer under reviewcnow waits for its next key as long as you like; any key other than ours changes text as always.- No escape-sequence garbage over Claude's prompt, and Claude's notifications in Neovim. Under some multiplexers or Kitty, Claude Code sent its "waiting for your input" notification as Kitty's OSC 99, and the outer terminal printed it as text such as
99;i=3352:d=1:a=focus;. Claude started from Neovim now sends nothing to the terminal (preferredNotifChannel = "notifications_disabled"in its settings file); aNotificationhook shows "Claude is waiting for your input" and "Claude needs your permission" withvim.notifyinstead, except while the cursor is in Claude's terminal. ]kand[kwork in any file. In a file that is not under review they did nothing, though files waited for review. Now they open the next or previous one, or say that none waits.- Bash in a folder of repositories. When the project folder is not a git repository but holds several, Bash edits in any of them now come up for review. Before, a Bash call that started in such a folder escaped review entirely, and so did one that went
cd ../webfrom a neighbor. The plugin snapshots up to 32 repositories one level below the folder, all at once: with 22 that takes about 0.3 s per Bash call. - An untracked file Bash rewrote or deleted comes up for review even when Neovim does not have it open, as a file Claude created and you kept but have not committed yet does when a formatter rewrites it. Before each Bash call the plugin copies untracked files up to 2 MB, 200 files and 20 MB at most; on APFS a copy is a clone.
- Review no longer fights your git over
index.lock. The Bash snapshot took the lock on a tree with uncommitted changes, so a commit you made in lazygit while Claude ran Bash could fail, and the snapshot dropped out when your git held the lock. It now works on a copy of the index. - Bash snapshots run their git commands at once: in a repository of 6 000 files a Bash call waits about 50 ms for review instead of 140.