From 5746fc5a054f9a44c1b153ff8bdbb59b726b9828 Mon Sep 17 00:00:00 2001 From: rishi-opensource Date: Thu, 19 Mar 2026 18:39:09 +0530 Subject: [PATCH 01/12] build: auto-bump claude_code_version variable and tests during release --- .github/scripts/update-version.sh | 9 ++++++++- .releaserc.json | 14 +++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/.github/scripts/update-version.sh b/.github/scripts/update-version.sh index 3d12e6d..5023f2a 100755 --- a/.github/scripts/update-version.sh +++ b/.github/scripts/update-version.sh @@ -19,5 +19,12 @@ perl -pi -e "s/version-[0-9]+\.[0-9]+\.[0-9]+(?:-[a-zA-Z0-9.]+)?-blue\.svg/versi # This replaces any instances of `vX.Y.Z` globally (git branch, tags, headers). perl -pi -e "s/v[0-9]+\.[0-9]+\.[0-9]+(?:-[a-zA-Z0-9.]+)?/v${NEW_VERSION}/g" README.md +# Update internal plugin version variable +perl -pi -e "s/let g:claude_code_version = \"[0-9]+\.[0-9]+\.[0-9]+(?:-[a-zA-Z0-9.]+)?\"/let g:claude_code_version = \"${NEW_VERSION}\"/g" plugin/claude_code.vim + +# Update Vader test suite to match the new version +perl -pi -e "s/g:claude_code_version is set to [0-9]+\.[0-9]+\.[0-9]+(?:-[a-zA-Z0-9.]+)?/g:claude_code_version is set to ${NEW_VERSION}/g" test/test_dispatch.vader +perl -pi -e "s/AssertEqual '[0-9]+\.[0-9]+\.[0-9]+(?:-[a-zA-Z0-9.]+)?', g:claude_code_version/AssertEqual '${NEW_VERSION}', g:claude_code_version/g" test/test_dispatch.vader + # Make sure we didn't inadvertently modify anything besides the semver strings! -echo "Version successfully updated in README.md" +echo "Version successfully updated across all files" diff --git a/.releaserc.json b/.releaserc.json index 74675f0..70834e1 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -1,5 +1,7 @@ { - "branches": ["main"], + "branches": [ + "main" + ], "plugins": [ "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", @@ -13,10 +15,16 @@ [ "@semantic-release/git", { - "assets": ["CHANGELOG.md", "README.md", "doc/claude_code.txt"], + "assets": [ + "CHANGELOG.md", + "README.md", + "doc/claude_code.txt", + "plugin/claude_code.vim", + "test/test_dispatch.vader" + ], "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" } ], "@semantic-release/github" ] -} +} \ No newline at end of file From ab4785c138f0ef49c47898efa79dd15b532caf6a Mon Sep 17 00:00:00 2001 From: rishi-opensource Date: Thu, 19 Mar 2026 19:58:47 +0530 Subject: [PATCH 02/12] feat: add tmux-like zoom (maximize) toggle for terminal --- README.md | 2 ++ autoload/claude_code/keymaps.vim | 2 ++ autoload/claude_code/terminal.vim | 44 +++++++++++++++++++++++++++++++ doc/claude_code.txt | 7 +++++ plugin/claude_code.vim | 4 ++- 5 files changed, 58 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1771b6c..ee46ffd 100644 --- a/README.md +++ b/README.md @@ -133,6 +133,7 @@ Run a health check to verify your setup: | `:Claude preview uninstall` | Remove diff preview hooks | | `:Claude preview close` | Manually close an open diff tab | | `:Claude preview status` | Show diff preview status and dependency checks | +| `:Claude zoom` | Toggle full-screen (zoom) mode for the terminal | When enabled, every time Claude proposes a file edit (Edit, Write, or MultiEdit), a side-by-side diff tab opens showing the **current** file on the left and the **proposed** changes on the right. Review the diff, then accept or reject in the Claude terminal. Press `q` to close the diff tab. @@ -168,6 +169,7 @@ let g:claude_code_diff_preview = 1 | Normal | `cC` | Toggle with `--continue` | | Normal | `cV` | Toggle with `--verbose` | | Terminal | `` | Hide Claude Code terminal | +| Terminal | `` | **Zoom Toggle**: Maximize or restore terminal | | Terminal | `` | Navigate to adjacent window | ### Extended keymaps (`g:claude_code_map_extended_prefix` + key) diff --git a/autoload/claude_code/keymaps.vim b/autoload/claude_code/keymaps.vim index a57b82d..5e0025f 100644 --- a/autoload/claude_code/keymaps.vim +++ b/autoload/claude_code/keymaps.vim @@ -17,6 +17,7 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort execute 'tnoremap j' execute 'tnoremap k' execute 'tnoremap l' + execute 'tnoremap :Claude zoom' " Mouse/touchpad scroll in terminal mode: escape to Normal, scroll, stay in " Normal so the user can keep reading. Vim passes raw ScrollWheel events @@ -39,6 +40,7 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort execute 'nnoremap j' execute 'nnoremap k' execute 'nnoremap l' + execute 'nnoremap :Claude zoom' " Autocommand to re-enter terminal mode when switching INTO the Claude window " from another window. Uses WinEnter only (not BufEnter) so that the user diff --git a/autoload/claude_code/terminal.vim b/autoload/claude_code/terminal.vim index bdda9ae..90c876e 100644 --- a/autoload/claude_code/terminal.vim +++ b/autoload/claude_code/terminal.vim @@ -55,6 +55,50 @@ function! claude_code#terminal#toggle(...) abort endif endfunction +" Toggle the zoomed (maximized) state of the current Claude terminal. +" Uses a temporary tab to provide a full-screen view without losing context. +function! claude_code#terminal#zoom() abort + if get(t:, 'claude_code_zoomed', 0) + " We are in a zoomed tab, so just close it to return. + tabclose + return + endif + + let l:bufnr = bufnr('%') + let l:id = s:get_instance_id() + let l:instance_buf = get(s:instances, l:id, -1) + + if l:bufnr != l:instance_buf + " If we are not in the terminal window, try to jump to it first. + if l:instance_buf > 0 && s:is_valid(l:instance_buf) + let l:win_ids = win_findbuf(l:instance_buf) + if !empty(l:win_ids) + call win_gotoid(l:win_ids[0]) + let l:bufnr = l:instance_buf + else + " It's hidden, show it first normally. + call s:show_existing(l:instance_buf) + let l:bufnr = l:instance_buf + endif + endif + endif + + if l:bufnr > 0 && s:is_valid(l:bufnr) + " Maximize by opening the buffer in a new tab. + execute 'tab split' + let t:claude_code_zoomed = 1 + call s:configure_term_window() + " Ensure we stay in terminal mode if inserts are enabled. + if claude_code#config#get('enter_insert') + if mode() !=# 't' + silent! normal! i + endif + endif + else + call claude_code#util#error('claude-code: no active terminal to zoom') + endif +endfunction + " --------------------------------------------------------------------------- " Internal helpers " --------------------------------------------------------------------------- diff --git a/doc/claude_code.txt b/doc/claude_code.txt index db91e66..2c942dc 100644 --- a/doc/claude_code.txt +++ b/doc/claude_code.txt @@ -111,6 +111,12 @@ file is used. :Claude verbose Toggle with --verbose (enables detailed Claude Code logging). + *:Claude-zoom* +:Claude zoom + Toggle the zoomed (maximized) state of the current Claude terminal. + Uses a temporary tab to provide a full-screen view without losing + the terminal context. Restore the original split by zooming again. + ------------------------------------------------------------------------------ 5.2 Code Intelligence *claude-code-intel* @@ -306,6 +312,7 @@ Default terminal keymaps (when |g:claude_code_map_keys| is 1): Terminal mode (inside the Claude window): ~ Hide Claude Code terminal + Zoom Toggle: Maximize or restore terminal Navigate to adjacent window Extended keymaps (when g:claude_code_map_extended_keys is 1): diff --git a/plugin/claude_code.vim b/plugin/claude_code.vim index c4007fb..753af03 100644 --- a/plugin/claude_code.vim +++ b/plugin/claude_code.vim @@ -44,7 +44,7 @@ function! s:complete(ArgLead, CmdLine, CursorPos) abort \ 'rename', 'optimize', 'debug', 'apply', \ 'chat', 'context', 'model', \ 'version', 'doctor', - \ 'preview', + \ 'preview', 'zoom', \ ] return filter(copy(l:subs), 'v:val =~# "^" . a:ArgLead') endfunction @@ -107,6 +107,8 @@ function! s:dispatch(args) abort call claude_code#meta_commands#doctor() elseif l:sub ==# 'preview' call s:dispatch_preview(l:flags) + elseif l:sub ==# 'zoom' + call claude_code#terminal#zoom() else call claude_code#util#error('vim-claude-code: unknown sub-command "' . l:sub . '". Try :Claude ') endif From 78dc53fa795f3ebf0df0cfa142c05ea815552514 Mon Sep 17 00:00:00 2001 From: rishi-opensource Date: Thu, 19 Mar 2026 20:06:38 +0530 Subject: [PATCH 03/12] feat: change zoom keybinding to z to avoid conflict with --- README.md | 2 +- autoload/claude_code/keymaps.vim | 4 ++-- doc/claude_code.txt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ee46ffd..0ed460d 100644 --- a/README.md +++ b/README.md @@ -169,7 +169,7 @@ let g:claude_code_diff_preview = 1 | Normal | `cC` | Toggle with `--continue` | | Normal | `cV` | Toggle with `--verbose` | | Terminal | `` | Hide Claude Code terminal | -| Terminal | `` | **Zoom Toggle**: Maximize or restore terminal | +| Terminal | `z` | **Zoom Toggle**: Maximize or restore terminal | | Terminal | `` | Navigate to adjacent window | ### Extended keymaps (`g:claude_code_map_extended_prefix` + key) diff --git a/autoload/claude_code/keymaps.vim b/autoload/claude_code/keymaps.vim index 5e0025f..14108d2 100644 --- a/autoload/claude_code/keymaps.vim +++ b/autoload/claude_code/keymaps.vim @@ -17,7 +17,7 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort execute 'tnoremap j' execute 'tnoremap k' execute 'tnoremap l' - execute 'tnoremap :Claude zoom' + execute 'tnoremap z :Claude zoom' " Mouse/touchpad scroll in terminal mode: escape to Normal, scroll, stay in " Normal so the user can keep reading. Vim passes raw ScrollWheel events @@ -40,7 +40,7 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort execute 'nnoremap j' execute 'nnoremap k' execute 'nnoremap l' - execute 'nnoremap :Claude zoom' + execute 'nnoremap z :Claude zoom' " Autocommand to re-enter terminal mode when switching INTO the Claude window " from another window. Uses WinEnter only (not BufEnter) so that the user diff --git a/doc/claude_code.txt b/doc/claude_code.txt index 2c942dc..10b7423 100644 --- a/doc/claude_code.txt +++ b/doc/claude_code.txt @@ -312,7 +312,7 @@ Default terminal keymaps (when |g:claude_code_map_keys| is 1): Terminal mode (inside the Claude window): ~ Hide Claude Code terminal - Zoom Toggle: Maximize or restore terminal + z Zoom Toggle: Maximize or restore terminal Navigate to adjacent window Extended keymaps (when g:claude_code_map_extended_keys is 1): From dba57aa85bc29cccb940e0e41be0ecd55dc4d785 Mon Sep 17 00:00:00 2001 From: rishi-opensource Date: Thu, 19 Mar 2026 20:14:20 +0530 Subject: [PATCH 04/12] feat: change zoom keybinding to z as final choice --- README.md | 2 +- autoload/claude_code/keymaps.vim | 4 ++-- doc/claude_code.txt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0ed460d..e8590f6 100644 --- a/README.md +++ b/README.md @@ -169,7 +169,7 @@ let g:claude_code_diff_preview = 1 | Normal | `cC` | Toggle with `--continue` | | Normal | `cV` | Toggle with `--verbose` | | Terminal | `` | Hide Claude Code terminal | -| Terminal | `z` | **Zoom Toggle**: Maximize or restore terminal | +| Terminal | `z` | **Zoom Toggle**: Maximize or restore terminal | | Terminal | `` | Navigate to adjacent window | ### Extended keymaps (`g:claude_code_map_extended_prefix` + key) diff --git a/autoload/claude_code/keymaps.vim b/autoload/claude_code/keymaps.vim index 14108d2..8c0b213 100644 --- a/autoload/claude_code/keymaps.vim +++ b/autoload/claude_code/keymaps.vim @@ -17,7 +17,7 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort execute 'tnoremap j' execute 'tnoremap k' execute 'tnoremap l' - execute 'tnoremap z :Claude zoom' + execute 'tnoremap z :Claude zoom' " Mouse/touchpad scroll in terminal mode: escape to Normal, scroll, stay in " Normal so the user can keep reading. Vim passes raw ScrollWheel events @@ -40,7 +40,7 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort execute 'nnoremap j' execute 'nnoremap k' execute 'nnoremap l' - execute 'nnoremap z :Claude zoom' + execute 'nnoremap z :Claude zoom' " Autocommand to re-enter terminal mode when switching INTO the Claude window " from another window. Uses WinEnter only (not BufEnter) so that the user diff --git a/doc/claude_code.txt b/doc/claude_code.txt index 10b7423..eb003b5 100644 --- a/doc/claude_code.txt +++ b/doc/claude_code.txt @@ -312,7 +312,7 @@ Default terminal keymaps (when |g:claude_code_map_keys| is 1): Terminal mode (inside the Claude window): ~ Hide Claude Code terminal - z Zoom Toggle: Maximize or restore terminal + z Zoom Toggle: Maximize or restore terminal Navigate to adjacent window Extended keymaps (when g:claude_code_map_extended_keys is 1): From 0e53102980fb0e7a8bfbbca71f8d8eab3147ebab Mon Sep 17 00:00:00 2001 From: rishi-opensource Date: Thu, 19 Mar 2026 20:18:03 +0530 Subject: [PATCH 05/12] feat: unified 3-stage toggle flow (Hidden -> Split -> Zoom -> Hidden) --- README.md | 4 ++-- autoload/claude_code/terminal.vim | 25 ++++++++++++++++++++----- doc/claude_code.txt | 6 ++++-- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index e8590f6..094829a 100644 --- a/README.md +++ b/README.md @@ -165,10 +165,10 @@ let g:claude_code_diff_preview = 1 | Mode | Key | Action | |---|---|---| -| Normal | `` | Toggle Claude Code terminal | +| Normal | `` | **3-Stage Toggle**: Open (Split) → Maximize (Zoom) → Hide | | Normal | `cC` | Toggle with `--continue` | | Normal | `cV` | Toggle with `--verbose` | -| Terminal | `` | Hide Claude Code terminal | +| Terminal | `` | **3-Stage Toggle**: Open (Split) → Maximize (Zoom) → Hide | | Terminal | `z` | **Zoom Toggle**: Maximize or restore terminal | | Terminal | `` | Navigate to adjacent window | diff --git a/autoload/claude_code/terminal.vim b/autoload/claude_code/terminal.vim index 90c876e..4903429 100644 --- a/autoload/claude_code/terminal.vim +++ b/autoload/claude_code/terminal.vim @@ -18,10 +18,10 @@ let s:pending_variant = '' " --------------------------------------------------------------------------- " Toggle the Claude Code terminal, optionally with a subcommand variant. -" If a terminal for the current instance exists and is visible, hide it. -" If it exists but is hidden, show it. Otherwise create a new one. -" When a variant name is given (e.g. 'continue'), the corresponding CLI -" flag is appended on first creation only. +" implements a 3-stage state machine: +" 1. Hidden/Not Created -> Open in split +" 2. Visible in split -> Zoom (maximize) +" 3. Visible and Zoomed -> Hide function! claude_code#terminal#toggle(...) abort let l:variant_name = a:0 ? a:1 : '' call claude_code#util#debug('terminal#toggle variant=' . l:variant_name) @@ -42,11 +42,26 @@ function! claude_code#terminal#toggle(...) abort if l:bufnr > 0 && s:is_valid(l:bufnr) if s:is_visible(l:bufnr) - call claude_code#window#close_buf_windows(l:bufnr) + " If it's already visible, check if it's in the CURRENT tab. + if index(tabpagebuflist(), l:bufnr) >= 0 + " Toggle between Split -> Zoom -> Hide + if get(t:, 'claude_code_zoomed', 0) + " Stage 3: Hide everything for this instance + call claude_code#window#close_buf_windows(l:bufnr) + else + " Stage 2: Zoom it + call claude_code#terminal#zoom() + endif + else + " Not in current tab, so show it here (Stage 1) + call s:show_existing(l:bufnr) + endif else + " Stage 1: Exists but hidden call s:show_existing(l:bufnr) endif else + " Stage 1: Not created if !empty(l:flag) let s:pending_variant = l:flag endif diff --git a/doc/claude_code.txt b/doc/claude_code.txt index eb003b5..1547b2e 100644 --- a/doc/claude_code.txt +++ b/doc/claude_code.txt @@ -96,8 +96,10 @@ file is used. *:Claude* :Claude - Toggle the Claude Code terminal. Creates a new session on first use; - hides or restores an existing one on subsequent calls. + Toggle the Claude Code terminal using a 3-stage rotation: + 1. Hidden/Not Created -> Open in split + 2. Visible in split -> Zoom (maximize) + 3. Visible and Zoomed -> Hide *:Claude-continue* :Claude continue From 330fa7fb28a53385bf18119bc0e7e43d5ac52d53 Mon Sep 17 00:00:00 2001 From: rishi-opensource Date: Thu, 19 Mar 2026 20:20:11 +0530 Subject: [PATCH 06/12] Revert "feat: unified 3-stage toggle flow (Hidden -> Split -> Zoom -> Hidden)" This reverts commit 0e53102980fb0e7a8bfbbca71f8d8eab3147ebab. --- README.md | 4 ++-- autoload/claude_code/terminal.vim | 25 +++++-------------------- doc/claude_code.txt | 6 ++---- 3 files changed, 9 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 094829a..e8590f6 100644 --- a/README.md +++ b/README.md @@ -165,10 +165,10 @@ let g:claude_code_diff_preview = 1 | Mode | Key | Action | |---|---|---| -| Normal | `` | **3-Stage Toggle**: Open (Split) → Maximize (Zoom) → Hide | +| Normal | `` | Toggle Claude Code terminal | | Normal | `cC` | Toggle with `--continue` | | Normal | `cV` | Toggle with `--verbose` | -| Terminal | `` | **3-Stage Toggle**: Open (Split) → Maximize (Zoom) → Hide | +| Terminal | `` | Hide Claude Code terminal | | Terminal | `z` | **Zoom Toggle**: Maximize or restore terminal | | Terminal | `` | Navigate to adjacent window | diff --git a/autoload/claude_code/terminal.vim b/autoload/claude_code/terminal.vim index 4903429..90c876e 100644 --- a/autoload/claude_code/terminal.vim +++ b/autoload/claude_code/terminal.vim @@ -18,10 +18,10 @@ let s:pending_variant = '' " --------------------------------------------------------------------------- " Toggle the Claude Code terminal, optionally with a subcommand variant. -" implements a 3-stage state machine: -" 1. Hidden/Not Created -> Open in split -" 2. Visible in split -> Zoom (maximize) -" 3. Visible and Zoomed -> Hide +" If a terminal for the current instance exists and is visible, hide it. +" If it exists but is hidden, show it. Otherwise create a new one. +" When a variant name is given (e.g. 'continue'), the corresponding CLI +" flag is appended on first creation only. function! claude_code#terminal#toggle(...) abort let l:variant_name = a:0 ? a:1 : '' call claude_code#util#debug('terminal#toggle variant=' . l:variant_name) @@ -42,26 +42,11 @@ function! claude_code#terminal#toggle(...) abort if l:bufnr > 0 && s:is_valid(l:bufnr) if s:is_visible(l:bufnr) - " If it's already visible, check if it's in the CURRENT tab. - if index(tabpagebuflist(), l:bufnr) >= 0 - " Toggle between Split -> Zoom -> Hide - if get(t:, 'claude_code_zoomed', 0) - " Stage 3: Hide everything for this instance - call claude_code#window#close_buf_windows(l:bufnr) - else - " Stage 2: Zoom it - call claude_code#terminal#zoom() - endif - else - " Not in current tab, so show it here (Stage 1) - call s:show_existing(l:bufnr) - endif + call claude_code#window#close_buf_windows(l:bufnr) else - " Stage 1: Exists but hidden call s:show_existing(l:bufnr) endif else - " Stage 1: Not created if !empty(l:flag) let s:pending_variant = l:flag endif diff --git a/doc/claude_code.txt b/doc/claude_code.txt index 1547b2e..eb003b5 100644 --- a/doc/claude_code.txt +++ b/doc/claude_code.txt @@ -96,10 +96,8 @@ file is used. *:Claude* :Claude - Toggle the Claude Code terminal using a 3-stage rotation: - 1. Hidden/Not Created -> Open in split - 2. Visible in split -> Zoom (maximize) - 3. Visible and Zoomed -> Hide + Toggle the Claude Code terminal. Creates a new session on first use; + hides or restores an existing one on subsequent calls. *:Claude-continue* :Claude continue From bc11c3f1dfdba30294841d54f319df4169c4cdfa Mon Sep 17 00:00:00 2001 From: rishi-opensource Date: Thu, 19 Mar 2026 20:28:57 +0530 Subject: [PATCH 07/12] feat: implement smart toggle (Hidden -> Show, Visible -> Focus, Focused -> Hide) --- README.md | 4 ++-- autoload/claude_code/terminal.vim | 26 +++++++++++++++++++++----- doc/claude_code.txt | 7 ++++--- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index e8590f6..c538073 100644 --- a/README.md +++ b/README.md @@ -165,10 +165,10 @@ let g:claude_code_diff_preview = 1 | Mode | Key | Action | |---|---|---| -| Normal | `` | Toggle Claude Code terminal | +| Normal | `` | **Smart Toggle**: Open / Focus / Hide | | Normal | `cC` | Toggle with `--continue` | | Normal | `cV` | Toggle with `--verbose` | -| Terminal | `` | Hide Claude Code terminal | +| Terminal | `` | **Smart Toggle**: Open / Focus / Hide | | Terminal | `z` | **Zoom Toggle**: Maximize or restore terminal | | Terminal | `` | Navigate to adjacent window | diff --git a/autoload/claude_code/terminal.vim b/autoload/claude_code/terminal.vim index 90c876e..9fba7fe 100644 --- a/autoload/claude_code/terminal.vim +++ b/autoload/claude_code/terminal.vim @@ -18,10 +18,10 @@ let s:pending_variant = '' " --------------------------------------------------------------------------- " Toggle the Claude Code terminal, optionally with a subcommand variant. -" If a terminal for the current instance exists and is visible, hide it. -" If it exists but is hidden, show it. Otherwise create a new one. -" When a variant name is given (e.g. 'continue'), the corresponding CLI -" flag is appended on first creation only. +" Implements "Smart Toggle" behavior: +" 1. If Hidden -> Show existing (or create new) +" 2. If Visible but not focused -> Jump focus into the terminal +" 3. If Focused -> Hide the terminal function! claude_code#terminal#toggle(...) abort let l:variant_name = a:0 ? a:1 : '' call claude_code#util#debug('terminal#toggle variant=' . l:variant_name) @@ -42,11 +42,27 @@ function! claude_code#terminal#toggle(...) abort if l:bufnr > 0 && s:is_valid(l:bufnr) if s:is_visible(l:bufnr) - call claude_code#window#close_buf_windows(l:bufnr) + " If it's already visible, check if we are currently IN it. + if bufnr('%') == l:bufnr + " We are already in it: HIDE. + call claude_code#window#close_buf_windows(l:bufnr) + else + " It's visible elsewhere: JUMP to it. + let l:win_ids = win_findbuf(l:bufnr) + if !empty(l:win_ids) + call win_gotoid(l:win_ids[0]) + " Ensure we enter insert mode if configured. + if claude_code#config#get('enter_insert') && mode() !=# 't' + silent! normal! i + endif + endif + endif else + " It exists but is hidden: SHOW. call s:show_existing(l:bufnr) endif else + " Not created: CREATE. if !empty(l:flag) let s:pending_variant = l:flag endif diff --git a/doc/claude_code.txt b/doc/claude_code.txt index eb003b5..efa273b 100644 --- a/doc/claude_code.txt +++ b/doc/claude_code.txt @@ -96,9 +96,10 @@ file is used. *:Claude* :Claude - Toggle the Claude Code terminal. Creates a new session on first use; - hides or restores an existing one on subsequent calls. - + Toggle the Claude Code terminal using a Smart Toggle flow: + 1. If Hidden -> Show (or create new session) + 2. If Visible but not focused -> Jump focus into the terminal + 3. If Focused -> Hide the terminal *:Claude-continue* :Claude continue Toggle with --continue (resumes the most recent conversation). From 952b0a036efa956c1b3aa0c3e0f1428161c3494c Mon Sep 17 00:00:00 2001 From: rishi-opensource Date: Thu, 19 Mar 2026 20:37:39 +0530 Subject: [PATCH 08/12] Revert "feat: implement smart toggle (Hidden -> Show, Visible -> Focus, Focused -> Hide)" This reverts commit bc11c3f1dfdba30294841d54f319df4169c4cdfa. --- README.md | 4 ++-- autoload/claude_code/terminal.vim | 26 +++++--------------------- doc/claude_code.txt | 7 +++---- 3 files changed, 10 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index c538073..e8590f6 100644 --- a/README.md +++ b/README.md @@ -165,10 +165,10 @@ let g:claude_code_diff_preview = 1 | Mode | Key | Action | |---|---|---| -| Normal | `` | **Smart Toggle**: Open / Focus / Hide | +| Normal | `` | Toggle Claude Code terminal | | Normal | `cC` | Toggle with `--continue` | | Normal | `cV` | Toggle with `--verbose` | -| Terminal | `` | **Smart Toggle**: Open / Focus / Hide | +| Terminal | `` | Hide Claude Code terminal | | Terminal | `z` | **Zoom Toggle**: Maximize or restore terminal | | Terminal | `` | Navigate to adjacent window | diff --git a/autoload/claude_code/terminal.vim b/autoload/claude_code/terminal.vim index 9fba7fe..90c876e 100644 --- a/autoload/claude_code/terminal.vim +++ b/autoload/claude_code/terminal.vim @@ -18,10 +18,10 @@ let s:pending_variant = '' " --------------------------------------------------------------------------- " Toggle the Claude Code terminal, optionally with a subcommand variant. -" Implements "Smart Toggle" behavior: -" 1. If Hidden -> Show existing (or create new) -" 2. If Visible but not focused -> Jump focus into the terminal -" 3. If Focused -> Hide the terminal +" If a terminal for the current instance exists and is visible, hide it. +" If it exists but is hidden, show it. Otherwise create a new one. +" When a variant name is given (e.g. 'continue'), the corresponding CLI +" flag is appended on first creation only. function! claude_code#terminal#toggle(...) abort let l:variant_name = a:0 ? a:1 : '' call claude_code#util#debug('terminal#toggle variant=' . l:variant_name) @@ -42,27 +42,11 @@ function! claude_code#terminal#toggle(...) abort if l:bufnr > 0 && s:is_valid(l:bufnr) if s:is_visible(l:bufnr) - " If it's already visible, check if we are currently IN it. - if bufnr('%') == l:bufnr - " We are already in it: HIDE. - call claude_code#window#close_buf_windows(l:bufnr) - else - " It's visible elsewhere: JUMP to it. - let l:win_ids = win_findbuf(l:bufnr) - if !empty(l:win_ids) - call win_gotoid(l:win_ids[0]) - " Ensure we enter insert mode if configured. - if claude_code#config#get('enter_insert') && mode() !=# 't' - silent! normal! i - endif - endif - endif + call claude_code#window#close_buf_windows(l:bufnr) else - " It exists but is hidden: SHOW. call s:show_existing(l:bufnr) endif else - " Not created: CREATE. if !empty(l:flag) let s:pending_variant = l:flag endif diff --git a/doc/claude_code.txt b/doc/claude_code.txt index efa273b..eb003b5 100644 --- a/doc/claude_code.txt +++ b/doc/claude_code.txt @@ -96,10 +96,9 @@ file is used. *:Claude* :Claude - Toggle the Claude Code terminal using a Smart Toggle flow: - 1. If Hidden -> Show (or create new session) - 2. If Visible but not focused -> Jump focus into the terminal - 3. If Focused -> Hide the terminal + Toggle the Claude Code terminal. Creates a new session on first use; + hides or restores an existing one on subsequent calls. + *:Claude-continue* :Claude continue Toggle with --continue (resumes the most recent conversation). From 725d992cf48e0e0d80be2797b4b83c7fb16559f7 Mon Sep 17 00:00:00 2001 From: rishi-opensource Date: Thu, 19 Mar 2026 20:46:09 +0530 Subject: [PATCH 09/12] feat: make zoom keymap configurable via g:claude_code_map_zoom --- README.md | 1 + autoload/claude_code/config.vim | 1 + autoload/claude_code/keymaps.vim | 4 ++-- doc/claude_code.txt | 4 ++++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e8590f6..9cd7039 100644 --- a/README.md +++ b/README.md @@ -234,6 +234,7 @@ let g:claude_code_float_border = 'double' | `g:claude_code_map_keys` | `1` | Register default toggle keymaps | | `g:claude_code_map_extended_keys` | `1` | Register `c*` keymaps | | `g:claude_code_map_toggle` | `''` | Toggle key | +| `g:claude_code_map_zoom` | `'z'` | Zoom key | | `g:claude_code_map_continue` | `'cC'` | Continue key | | `g:claude_code_map_verbose` | `'cV'` | Verbose key | | `g:claude_code_map_extended_prefix` | `'c'` | Prefix for all extended keymaps | diff --git a/autoload/claude_code/config.vim b/autoload/claude_code/config.vim index dda3f8a..39c978f 100644 --- a/autoload/claude_code/config.vim +++ b/autoload/claude_code/config.vim @@ -33,6 +33,7 @@ let s:defaults = { \ 'map_toggle': '', \ 'map_continue': 'cC', \ 'map_verbose': 'cV', + \ 'map_zoom': 'z', \ 'debug': 0, \ 'terminal_start_delay': 300, \ 'scroll_keys': 1, diff --git a/autoload/claude_code/keymaps.vim b/autoload/claude_code/keymaps.vim index 8c0b213..ca5dc81 100644 --- a/autoload/claude_code/keymaps.vim +++ b/autoload/claude_code/keymaps.vim @@ -17,7 +17,7 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort execute 'tnoremap j' execute 'tnoremap k' execute 'tnoremap l' - execute 'tnoremap z :Claude zoom' + execute 'tnoremap ' . claude_code#config#get('map_zoom') . ' :Claude zoom' " Mouse/touchpad scroll in terminal mode: escape to Normal, scroll, stay in " Normal so the user can keep reading. Vim passes raw ScrollWheel events @@ -40,7 +40,7 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort execute 'nnoremap j' execute 'nnoremap k' execute 'nnoremap l' - execute 'nnoremap z :Claude zoom' + execute 'nnoremap ' . claude_code#config#get('map_zoom') . ' :Claude zoom' " Autocommand to re-enter terminal mode when switching INTO the Claude window " from another window. Uses WinEnter only (not BufEnter) so that the user diff --git a/doc/claude_code.txt b/doc/claude_code.txt index eb003b5..109e1d0 100644 --- a/doc/claude_code.txt +++ b/doc/claude_code.txt @@ -420,6 +420,10 @@ g:claude_code_map_extended_keys Default: 1 g:claude_code_map_toggle Default: '' Key to toggle the terminal (normal + terminal mode). + *g:claude_code_map_zoom* +g:claude_code_map_zoom Default: 'z' + Key to toggle the zoomed (maximized) state. + *g:claude_code_map_continue* g:claude_code_map_continue Default: 'cC' Key to toggle with --continue. From 247b9a280e7cd91dde8e94adc32398d24b973a67 Mon Sep 17 00:00:00 2001 From: rishi-opensource Date: Thu, 19 Mar 2026 20:52:02 +0530 Subject: [PATCH 10/12] fix: ensure key overrides work regardless of initialization order --- autoload/claude_code/keymaps.vim | 67 +++++++++++++++++++++++++++++++- plugin/claude_code.vim | 58 ++++++--------------------- 2 files changed, 77 insertions(+), 48 deletions(-) diff --git a/autoload/claude_code/keymaps.vim b/autoload/claude_code/keymaps.vim index ca5dc81..21ee787 100644 --- a/autoload/claude_code/keymaps.vim +++ b/autoload/claude_code/keymaps.vim @@ -10,6 +10,10 @@ let g:autoloaded_claude_code_keymaps = 1 " Set up buffer-local keymaps on a Claude Code terminal buffer. " Called each time a new terminal is created or an existing one is reopened. function! claude_code#keymaps#setup_terminal(bufnr) abort + if !claude_code#config#get('map_keys') + return + endif + " Window navigation from terminal mode: " Pattern: escape terminal mode -> switch window -> re-enter terminal mode " in the target window if it is also a terminal. @@ -17,7 +21,11 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort execute 'tnoremap j' execute 'tnoremap k' execute 'tnoremap l' - execute 'tnoremap ' . claude_code#config#get('map_zoom') . ' :Claude zoom' + + let l:zoom_key = claude_code#config#get('map_zoom') + if !empty(l:zoom_key) + execute 'tnoremap ' . l:zoom_key . ' :Claude zoom' + endif " Mouse/touchpad scroll in terminal mode: escape to Normal, scroll, stay in " Normal so the user can keep reading. Vim passes raw ScrollWheel events @@ -40,7 +48,9 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort execute 'nnoremap j' execute 'nnoremap k' execute 'nnoremap l' - execute 'nnoremap ' . claude_code#config#get('map_zoom') . ' :Claude zoom' + if !empty(l:zoom_key) + execute 'nnoremap ' . l:zoom_key . ' :Claude zoom' + endif " Autocommand to re-enter terminal mode when switching INTO the Claude window " from another window. Uses WinEnter only (not BufEnter) so that the user @@ -58,3 +68,56 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort augroup END endif endfunction +" Global keymaps setup +function! claude_code#keymaps#setup_globals() abort + if !claude_code#config#get('map_keys') + return + endif + + let l:toggle_key = claude_code#config#get('map_toggle') + if !empty(l:toggle_key) + execute 'nnoremap ' . l:toggle_key . ' :Claude' + execute 'tnoremap ' . l:toggle_key . ' :Claude' + endif + + let l:cont_key = claude_code#config#get('map_continue') + if !empty(l:cont_key) + execute 'nnoremap ' . l:cont_key . ' :Claude continue' + endif + + let l:verbose_key = claude_code#config#get('map_verbose') + if !empty(l:verbose_key) + execute 'nnoremap ' . l:verbose_key . ' :Claude verbose' + endif + + if claude_code#config#get('map_extended_keys') + let l:prefix = claude_code#config#get('map_extended_prefix') + " Normal mode + execute 'nnoremap ' . l:prefix . 'e :Claude explain' + execute 'nnoremap ' . l:prefix . 'f :Claude fix' + execute 'nnoremap ' . l:prefix . 'r :Claude refactor' + execute 'nnoremap ' . l:prefix . 't :Claude test' + execute 'nnoremap ' . l:prefix . 'd :Claude doc' + execute 'nnoremap ' . l:prefix . 'G :Claude commit' + execute 'nnoremap ' . l:prefix . 'R :Claude review' + execute 'nnoremap ' . l:prefix . 'p :Claude pr' + execute 'nnoremap ' . l:prefix . 'P :Claude plan' + execute 'nnoremap ' . l:prefix . 'a :Claude analyze' + execute 'nnoremap ' . l:prefix . 'n :Claude rename' + execute 'nnoremap ' . l:prefix . 'o :Claude optimize' + execute 'nnoremap ' . l:prefix . 'D :Claude debug' + execute 'nnoremap ' . l:prefix . 'A :Claude apply' + execute 'nnoremap ' . l:prefix . 'c :Claude chat' + execute 'nnoremap ' . l:prefix . 'x :Claude context' + execute 'nnoremap ' . l:prefix . 'm :Claude model' + + " Visual mode + execute 'xnoremap ' . l:prefix . 'e :Claude explain' + execute 'xnoremap ' . l:prefix . 'f :Claude fix' + execute 'xnoremap ' . l:prefix . 'r :Claude refactor' + execute 'xnoremap ' . l:prefix . 't :Claude test' + execute 'xnoremap ' . l:prefix . 'd :Claude doc' + execute 'xnoremap ' . l:prefix . 'n :Claude rename' + execute 'xnoremap ' . l:prefix . 'o :Claude optimize' + endif +endfunction diff --git a/plugin/claude_code.vim b/plugin/claude_code.vim index 753af03..647f7f4 100644 --- a/plugin/claude_code.vim +++ b/plugin/claude_code.vim @@ -118,54 +118,20 @@ endfunction " Default keymaps " --------------------------------------------------------------------------- -if claude_code#config#get('map_keys') - let s:toggle_key = claude_code#config#get('map_toggle') - if !empty(s:toggle_key) - execute 'nnoremap ' . s:toggle_key . ' :Claude' - execute 'tnoremap ' . s:toggle_key . ' :Claude' - endif - - let s:cont_key = claude_code#config#get('map_continue') - if !empty(s:cont_key) - execute 'nnoremap ' . s:cont_key . ' :Claude continue' - endif +" --------------------------------------------------------------------------- +" Global keymaps initialization +" --------------------------------------------------------------------------- - let s:verbose_key = claude_code#config#get('map_verbose') - if !empty(s:verbose_key) - execute 'nnoremap ' . s:verbose_key . ' :Claude verbose' - endif -endif +" Initial setup of global keymaps. Run immediately to pick up any variables +" set BEFORE the plugin was loaded. +call claude_code#keymaps#setup_globals() -if claude_code#config#get('map_extended_keys') - let s:map_extended_prefix = claude_code#config#get('map_extended_prefix') - " Normal mode - execute 'nnoremap ' . s:map_extended_prefix . 'e :Claude explain' - execute 'nnoremap ' . s:map_extended_prefix . 'f :Claude fix' - execute 'nnoremap ' . s:map_extended_prefix . 'r :Claude refactor' - execute 'nnoremap ' . s:map_extended_prefix . 't :Claude test' - execute 'nnoremap ' . s:map_extended_prefix . 'd :Claude doc' - execute 'nnoremap ' . s:map_extended_prefix . 'G :Claude commit' - execute 'nnoremap ' . s:map_extended_prefix . 'R :Claude review' - execute 'nnoremap ' . s:map_extended_prefix . 'p :Claude pr' - execute 'nnoremap ' . s:map_extended_prefix . 'P :Claude plan' - execute 'nnoremap ' . s:map_extended_prefix . 'a :Claude analyze' - execute 'nnoremap ' . s:map_extended_prefix . 'n :Claude rename' - execute 'nnoremap ' . s:map_extended_prefix . 'o :Claude optimize' - execute 'nnoremap ' . s:map_extended_prefix . 'D :Claude debug' - execute 'nnoremap ' . s:map_extended_prefix . 'A :Claude apply' - execute 'nnoremap ' . s:map_extended_prefix . 'c :Claude chat' - execute 'nnoremap ' . s:map_extended_prefix . 'x :Claude context' - execute 'nnoremap ' . s:map_extended_prefix . 'm :Claude model' - - " Visual mode - execute 'xnoremap ' . s:map_extended_prefix . 'e :Claude explain' - execute 'xnoremap ' . s:map_extended_prefix . 'f :Claude fix' - execute 'xnoremap ' . s:map_extended_prefix . 'r :Claude refactor' - execute 'xnoremap ' . s:map_extended_prefix . 't :Claude test' - execute 'xnoremap ' . s:map_extended_prefix . 'd :Claude doc' - execute 'xnoremap ' . s:map_extended_prefix . 'n :Claude rename' - execute 'xnoremap ' . s:map_extended_prefix . 'o :Claude optimize' -endif +" Also run on VimEnter to pick up any variables set AFTER the plugin was +" loaded (e.g. at the bottom of .vimrc). +augroup ClaudeCodeGlobalMaps + autocmd! + autocmd VimEnter * call claude_code#keymaps#setup_globals() +augroup END " --------------------------------------------------------------------------- " :Claude preview — diff preview sub-commands From 7ec7e065cd0dad6e3d3a71dd7cae4f431030b64c Mon Sep 17 00:00:00 2001 From: rishi-opensource Date: Thu, 19 Mar 2026 20:57:25 +0530 Subject: [PATCH 11/12] Revert "fix: ensure key overrides work regardless of initialization order" This reverts commit 247b9a280e7cd91dde8e94adc32398d24b973a67. --- autoload/claude_code/keymaps.vim | 67 +------------------------------- plugin/claude_code.vim | 58 +++++++++++++++++++++------ 2 files changed, 48 insertions(+), 77 deletions(-) diff --git a/autoload/claude_code/keymaps.vim b/autoload/claude_code/keymaps.vim index 21ee787..ca5dc81 100644 --- a/autoload/claude_code/keymaps.vim +++ b/autoload/claude_code/keymaps.vim @@ -10,10 +10,6 @@ let g:autoloaded_claude_code_keymaps = 1 " Set up buffer-local keymaps on a Claude Code terminal buffer. " Called each time a new terminal is created or an existing one is reopened. function! claude_code#keymaps#setup_terminal(bufnr) abort - if !claude_code#config#get('map_keys') - return - endif - " Window navigation from terminal mode: " Pattern: escape terminal mode -> switch window -> re-enter terminal mode " in the target window if it is also a terminal. @@ -21,11 +17,7 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort execute 'tnoremap j' execute 'tnoremap k' execute 'tnoremap l' - - let l:zoom_key = claude_code#config#get('map_zoom') - if !empty(l:zoom_key) - execute 'tnoremap ' . l:zoom_key . ' :Claude zoom' - endif + execute 'tnoremap ' . claude_code#config#get('map_zoom') . ' :Claude zoom' " Mouse/touchpad scroll in terminal mode: escape to Normal, scroll, stay in " Normal so the user can keep reading. Vim passes raw ScrollWheel events @@ -48,9 +40,7 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort execute 'nnoremap j' execute 'nnoremap k' execute 'nnoremap l' - if !empty(l:zoom_key) - execute 'nnoremap ' . l:zoom_key . ' :Claude zoom' - endif + execute 'nnoremap ' . claude_code#config#get('map_zoom') . ' :Claude zoom' " Autocommand to re-enter terminal mode when switching INTO the Claude window " from another window. Uses WinEnter only (not BufEnter) so that the user @@ -68,56 +58,3 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort augroup END endif endfunction -" Global keymaps setup -function! claude_code#keymaps#setup_globals() abort - if !claude_code#config#get('map_keys') - return - endif - - let l:toggle_key = claude_code#config#get('map_toggle') - if !empty(l:toggle_key) - execute 'nnoremap ' . l:toggle_key . ' :Claude' - execute 'tnoremap ' . l:toggle_key . ' :Claude' - endif - - let l:cont_key = claude_code#config#get('map_continue') - if !empty(l:cont_key) - execute 'nnoremap ' . l:cont_key . ' :Claude continue' - endif - - let l:verbose_key = claude_code#config#get('map_verbose') - if !empty(l:verbose_key) - execute 'nnoremap ' . l:verbose_key . ' :Claude verbose' - endif - - if claude_code#config#get('map_extended_keys') - let l:prefix = claude_code#config#get('map_extended_prefix') - " Normal mode - execute 'nnoremap ' . l:prefix . 'e :Claude explain' - execute 'nnoremap ' . l:prefix . 'f :Claude fix' - execute 'nnoremap ' . l:prefix . 'r :Claude refactor' - execute 'nnoremap ' . l:prefix . 't :Claude test' - execute 'nnoremap ' . l:prefix . 'd :Claude doc' - execute 'nnoremap ' . l:prefix . 'G :Claude commit' - execute 'nnoremap ' . l:prefix . 'R :Claude review' - execute 'nnoremap ' . l:prefix . 'p :Claude pr' - execute 'nnoremap ' . l:prefix . 'P :Claude plan' - execute 'nnoremap ' . l:prefix . 'a :Claude analyze' - execute 'nnoremap ' . l:prefix . 'n :Claude rename' - execute 'nnoremap ' . l:prefix . 'o :Claude optimize' - execute 'nnoremap ' . l:prefix . 'D :Claude debug' - execute 'nnoremap ' . l:prefix . 'A :Claude apply' - execute 'nnoremap ' . l:prefix . 'c :Claude chat' - execute 'nnoremap ' . l:prefix . 'x :Claude context' - execute 'nnoremap ' . l:prefix . 'm :Claude model' - - " Visual mode - execute 'xnoremap ' . l:prefix . 'e :Claude explain' - execute 'xnoremap ' . l:prefix . 'f :Claude fix' - execute 'xnoremap ' . l:prefix . 'r :Claude refactor' - execute 'xnoremap ' . l:prefix . 't :Claude test' - execute 'xnoremap ' . l:prefix . 'd :Claude doc' - execute 'xnoremap ' . l:prefix . 'n :Claude rename' - execute 'xnoremap ' . l:prefix . 'o :Claude optimize' - endif -endfunction diff --git a/plugin/claude_code.vim b/plugin/claude_code.vim index 647f7f4..753af03 100644 --- a/plugin/claude_code.vim +++ b/plugin/claude_code.vim @@ -118,20 +118,54 @@ endfunction " Default keymaps " --------------------------------------------------------------------------- -" --------------------------------------------------------------------------- -" Global keymaps initialization -" --------------------------------------------------------------------------- +if claude_code#config#get('map_keys') + let s:toggle_key = claude_code#config#get('map_toggle') + if !empty(s:toggle_key) + execute 'nnoremap ' . s:toggle_key . ' :Claude' + execute 'tnoremap ' . s:toggle_key . ' :Claude' + endif + + let s:cont_key = claude_code#config#get('map_continue') + if !empty(s:cont_key) + execute 'nnoremap ' . s:cont_key . ' :Claude continue' + endif -" Initial setup of global keymaps. Run immediately to pick up any variables -" set BEFORE the plugin was loaded. -call claude_code#keymaps#setup_globals() + let s:verbose_key = claude_code#config#get('map_verbose') + if !empty(s:verbose_key) + execute 'nnoremap ' . s:verbose_key . ' :Claude verbose' + endif +endif -" Also run on VimEnter to pick up any variables set AFTER the plugin was -" loaded (e.g. at the bottom of .vimrc). -augroup ClaudeCodeGlobalMaps - autocmd! - autocmd VimEnter * call claude_code#keymaps#setup_globals() -augroup END +if claude_code#config#get('map_extended_keys') + let s:map_extended_prefix = claude_code#config#get('map_extended_prefix') + " Normal mode + execute 'nnoremap ' . s:map_extended_prefix . 'e :Claude explain' + execute 'nnoremap ' . s:map_extended_prefix . 'f :Claude fix' + execute 'nnoremap ' . s:map_extended_prefix . 'r :Claude refactor' + execute 'nnoremap ' . s:map_extended_prefix . 't :Claude test' + execute 'nnoremap ' . s:map_extended_prefix . 'd :Claude doc' + execute 'nnoremap ' . s:map_extended_prefix . 'G :Claude commit' + execute 'nnoremap ' . s:map_extended_prefix . 'R :Claude review' + execute 'nnoremap ' . s:map_extended_prefix . 'p :Claude pr' + execute 'nnoremap ' . s:map_extended_prefix . 'P :Claude plan' + execute 'nnoremap ' . s:map_extended_prefix . 'a :Claude analyze' + execute 'nnoremap ' . s:map_extended_prefix . 'n :Claude rename' + execute 'nnoremap ' . s:map_extended_prefix . 'o :Claude optimize' + execute 'nnoremap ' . s:map_extended_prefix . 'D :Claude debug' + execute 'nnoremap ' . s:map_extended_prefix . 'A :Claude apply' + execute 'nnoremap ' . s:map_extended_prefix . 'c :Claude chat' + execute 'nnoremap ' . s:map_extended_prefix . 'x :Claude context' + execute 'nnoremap ' . s:map_extended_prefix . 'm :Claude model' + + " Visual mode + execute 'xnoremap ' . s:map_extended_prefix . 'e :Claude explain' + execute 'xnoremap ' . s:map_extended_prefix . 'f :Claude fix' + execute 'xnoremap ' . s:map_extended_prefix . 'r :Claude refactor' + execute 'xnoremap ' . s:map_extended_prefix . 't :Claude test' + execute 'xnoremap ' . s:map_extended_prefix . 'd :Claude doc' + execute 'xnoremap ' . s:map_extended_prefix . 'n :Claude rename' + execute 'xnoremap ' . s:map_extended_prefix . 'o :Claude optimize' +endif " --------------------------------------------------------------------------- " :Claude preview — diff preview sub-commands From ed135527e5232ffc959de1d276df833aa08b2845 Mon Sep 17 00:00:00 2001 From: rishi-opensource Date: Thu, 19 Mar 2026 21:01:11 +0530 Subject: [PATCH 12/12] feat: add global zoom mapping to allow zooming from any buffer --- plugin/claude_code.vim | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugin/claude_code.vim b/plugin/claude_code.vim index 753af03..900b1c6 100644 --- a/plugin/claude_code.vim +++ b/plugin/claude_code.vim @@ -134,6 +134,11 @@ if claude_code#config#get('map_keys') if !empty(s:verbose_key) execute 'nnoremap ' . s:verbose_key . ' :Claude verbose' endif + + let s:zoom_key = claude_code#config#get('map_zoom') + if !empty(s:zoom_key) + execute 'nnoremap ' . s:zoom_key . ' :Claude zoom' + endif endif if claude_code#config#get('map_extended_keys')