Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion .github/scripts/update-version.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
14 changes: 11 additions & 3 deletions .releaserc.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
{
"branches": ["main"],
"branches": [
"main"
],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
Expand All @@ -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"
]
}
}
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down Expand Up @@ -168,6 +169,7 @@ let g:claude_code_diff_preview = 1
| Normal | `<Leader>cC` | Toggle with `--continue` |
| Normal | `<Leader>cV` | Toggle with `--verbose` |
| Terminal | `<C-\>` | Hide Claude Code terminal |
| Terminal | `<C-w>z` | **Zoom Toggle**: Maximize or restore terminal |
| Terminal | `<C-h/j/k/l>` | Navigate to adjacent window |

### Extended keymaps (`g:claude_code_map_extended_prefix` + key)
Expand Down Expand Up @@ -232,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 `<Leader>c*` keymaps |
| `g:claude_code_map_toggle` | `'<C-\>'` | Toggle key |
| `g:claude_code_map_zoom` | `'<C-w>z'` | Zoom key |
| `g:claude_code_map_continue` | `'<Leader>cC'` | Continue key |
| `g:claude_code_map_verbose` | `'<Leader>cV'` | Verbose key |
| `g:claude_code_map_extended_prefix` | `'<Leader>c'` | Prefix for all extended keymaps |
Expand Down
1 change: 1 addition & 0 deletions autoload/claude_code/config.vim
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ let s:defaults = {
\ 'map_toggle': '<C-\>',
\ 'map_continue': '<Leader>cC',
\ 'map_verbose': '<Leader>cV',
\ 'map_zoom': '<C-w>z',
\ 'debug': 0,
\ 'terminal_start_delay': 300,
\ 'scroll_keys': 1,
Expand Down
2 changes: 2 additions & 0 deletions autoload/claude_code/keymaps.vim
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort
execute 'tnoremap <buffer> <silent> <C-j> <C-\><C-n><C-w>j'
execute 'tnoremap <buffer> <silent> <C-k> <C-\><C-n><C-w>k'
execute 'tnoremap <buffer> <silent> <C-l> <C-\><C-n><C-w>l'
execute 'tnoremap <buffer> <silent> ' . claude_code#config#get('map_zoom') . ' <C-\><C-n>:Claude zoom<CR>'

" Mouse/touchpad scroll in terminal mode: escape to Normal, scroll, stay in
" Normal so the user can keep reading. Vim passes raw ScrollWheel events
Expand All @@ -39,6 +40,7 @@ function! claude_code#keymaps#setup_terminal(bufnr) abort
execute 'nnoremap <buffer> <silent> <C-j> <C-w>j'
execute 'nnoremap <buffer> <silent> <C-k> <C-w>k'
execute 'nnoremap <buffer> <silent> <C-l> <C-w>l'
execute 'nnoremap <buffer> <silent> ' . claude_code#config#get('map_zoom') . ' :Claude zoom<CR>'

" Autocommand to re-enter terminal mode when switching INTO the Claude window
" from another window. Uses WinEnter only (not BufEnter) so that the user
Expand Down
44 changes: 44 additions & 0 deletions autoload/claude_code/terminal.vim
Original file line number Diff line number Diff line change
Expand Up @@ -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
" ---------------------------------------------------------------------------
Expand Down
11 changes: 11 additions & 0 deletions doc/claude_code.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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*

Expand Down Expand Up @@ -306,6 +312,7 @@ Default terminal keymaps (when |g:claude_code_map_keys| is 1):

Terminal mode (inside the Claude window): ~
<C-\> Hide Claude Code terminal
<C-w>z Zoom Toggle: Maximize or restore terminal
<C-h/j/k/l> Navigate to adjacent window

Extended keymaps (when g:claude_code_map_extended_keys is 1):
Expand Down Expand Up @@ -413,6 +420,10 @@ g:claude_code_map_extended_keys Default: 1
g:claude_code_map_toggle Default: '<C-\>'
Key to toggle the terminal (normal + terminal mode).

*g:claude_code_map_zoom*
g:claude_code_map_zoom Default: '<C-w>z'
Key to toggle the zoomed (maximized) state.

*g:claude_code_map_continue*
g:claude_code_map_continue Default: '<Leader>cC'
Key to toggle with --continue.
Expand Down
9 changes: 8 additions & 1 deletion plugin/claude_code.vim
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 <Tab>')
endif
Expand All @@ -132,6 +134,11 @@ if claude_code#config#get('map_keys')
if !empty(s:verbose_key)
execute 'nnoremap <silent> ' . s:verbose_key . ' :Claude verbose<CR>'
endif

let s:zoom_key = claude_code#config#get('map_zoom')
if !empty(s:zoom_key)
execute 'nnoremap <silent> ' . s:zoom_key . ' :Claude zoom<CR>'
endif
endif

if claude_code#config#get('map_extended_keys')
Expand Down
Loading