[FEATURE] Allow rebinding Ctrl+D to scroll:halfPageDown in fullscreen (vim-style scrolling)

Status Open
Reported on v2.1.292
Maintainer reply None cached
Activity 0 comments · opened Oct 6, 2026

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

  1. ~/.claude/keybindings.json:

``json
{
"bindings": [
{
"context": "Scroll",
"bindings": {
"ctrl+u": "scroll:halfPageUp",
"ctrl+d": "scroll:halfPageDown"
}
}
]
}
``

  1. /tui fullscreen, produce enough output to scroll.
  2. Press Ctrl+U → scrolls up half a page (works).
  3. 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+d to be bound in the Scroll context; keep the hardcoded exit as the fallback when nothing else claims the key.
  • Or treat Ctrl+D as exit only when the prompt is empty and the user has not bound it elsewhere.
  • Or make Ctrl+D → scroll:halfPageDown a built-in default when fullscreen + vim mode are both enabled (exit stays available via Ctrl+C twice or /exit).

Workarounds tried

  • Binding in keybindings.json: not possible, Ctrl+D is 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+D for every app in the terminal.

Related: #87932 (gate keybinding contexts on vim mode), #35627.

View original on GitHub ↗