[FEATURE] Allow rebinding Ctrl+D to scroll:halfPageDown in fullscreen (vim-style scrolling)
Summary
In fullscreen rendering (/tui fullscreen) with vim editor mode, there is no way to make Ctrl+D scroll half a page. Ctrl+D is listed as a reserved, non-rebindable shortcut ("Hardcoded exit"), so binding it in the Scroll context has no effect and pressing it enters the exit confirmation instead.
This is inconsistent with the docs, which describe scroll:halfPageDown / scroll:halfPageUp as "provided for vi-style rebinds" — the vi-style key for half-page-down is exactly the one that can't be bound.
Environment
- Claude Code 2.1.292
- macOS (Darwin 25.5.0), Warp terminal, no tmux
"tui": "fullscreen","editorMode": "vim"
Steps to reproduce
~/.claude/keybindings.json:
``json``
{
"bindings": [
{
"context": "Scroll",
"bindings": {
"ctrl+u": "scroll:halfPageUp",
"ctrl+d": "scroll:halfPageDown"
}
}
]
}
/tui fullscreen, produce enough output to scroll.- Press
Ctrl+U→ scrolls up half a page (works). - Press
Ctrl+D→ exit confirmation ("press again to exit") instead of scrolling.
Expected
Ctrl+D should be rebindable in the Scroll context (or at least when fullscreen + vim mode is on), so Ctrl+U/Ctrl+D work as a pair like in vim, less, and the transcript viewer (Ctrl+O), where Ctrl+D already scrolls half a page.
Suggestions
Any of these would solve it:
- Allow
ctrl+dto be bound in theScrollcontext; keep the hardcoded exit as the fallback when nothing else claims the key. - Or treat
Ctrl+Das exit only when the prompt is empty and the user has not bound it elsewhere. - Or make
Ctrl+D→scroll:halfPageDowna built-in default when fullscreen + vim mode are both enabled (exit stays available viaCtrl+Ctwice or/exit).
Workarounds tried
- Binding in
keybindings.json: not possible,Ctrl+Dis documented as reserved. - Terminal-level remap: Warp cannot send custom key sequences (warpdotdev/Warp#8462), so the only option is an OS-level remapper (Karabiner-Elements), which removes
Ctrl+Dfor every app in the terminal.
Related: #87932 (gate keybinding contexts on vim mode), #35627.