Skip to content

claudecode.nvim 1.2.0

Choose a tag to compare

@odiumuniverse odiumuniverse released this 20 Oct 21:47
· 9 commits to main since this release
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 c now 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 = false turns 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 sets preferredNotifChannel = "notifications_disabled" for that Claude only; Claude outside Neovim keeps yours.
  • The highlight group ClaudeCodeReviewNoteSign is now ClaudeCodeReviewNoteBorder, and the lists use ClaudeCodeReviewAdded and ClaudeCodeReviewRemoved.

Removed

  • Upstream commands the review replaces, or whose work the plugin does on its own. In a proposal cS takes it all, cX refuses it and :w answers with what is there, instead of :ClaudeCodeDiffAccept, :ClaudeCodeDiffDeny and :ClaudeCodeCloseAllDiffs. :ClaudeCode toggles instead of :ClaudeCodeOpen and :ClaudeCodeClose. The server starts with the plugin and :checkhealth claudecode shows its state, instead of :ClaudeCodeStart, :ClaudeCodeStop and :ClaudeCodeStatus. :ClaudeCode --model or Claude's /model picks the model instead of :ClaudeCodeSelectModel, and notes send text instead of :ClaudeCodeSendText. The LazyVim spec drops <leader>aa and <leader>ad, and diff_opts.provider loses accept_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 cR does; where no note waits it is Enter, and in neo-tree, quickfix and other lists it stays theirs. review.notes.local_send_keymap sets the key.
  • A list of your notes. <leader>an in 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_keymap sets the key.
  • Reject with a reason in Manual mode. cr in 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>ak shows 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 a diff block, 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. +12 is green and -3 red in <leader>ak, in snacks.picker and fzf-lua alike. <leader>an shows the same for the hunk under each note, and its preview shows the hunks as the review does. The highlight groups are ClaudeCodeReviewAdded and ClaudeCodeReviewRemoved.
  • 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 group ClaudeCodeReviewNoteSign gave way to ClaudeCodeReviewNoteBorder.

Fixed

  • A change thrown away outside review leaves no notes behind. After git checkout or 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. After cs the 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, cR and Claude to the old line once the file was closed. Now it follows the file on disk.
  • c, a pause, then s no longer starts Flash. Neovim gave up on cs after 'timeoutlen' (300 ms in LazyVim) and ran the change operator, so s started Flash and r Remote Flash, under which-key's "+Change" window. In a buffer under review c now 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); a Notification hook shows "Claude is waiting for your input" and "Claude needs your permission" with vim.notify instead, except while the cursor is in Claude's terminal.
  • ]k and [k work 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 ../web from 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.