Follow Discord
Sweep 22 Oct 2026 · 21:04Z Build v2.1.309 528 read Stable v2.1.308 Latest v2.1.309 Next v2.1.309 Feeds RSS JSON llms.txt llms-full.txt Unofficial
One change · claude-code

Customize keyboard shortcuts changedkeybindings

Nearest release: v2.1.248, published 5 hours after this site recorded the change. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.

Recorded here
Lines+40added
Lines−23removed
From line 92 where the diff opens
First seen 14 Aug 2026 this site's first read of the page
Recorded edits43to this page, all time

### Non-US keyboard layouts

The whole hunk

from line 92, old and new numbered
/
lines
from line 92
9292 
9393Actions available in the `Chat` context:
9494 
95| Action | Default | Description |
96| :-------------------- | :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
97| `chat:cancel` | Escape | Cancel current input |
98| `chat:clearInput` | Ctrl+L | Force a full screen redraw, preserving input and conversation |
99| `chat:clearScreen` | Cmd+K | Force a full screen redraw, preserving input and conversation. See [Clear the conversation](/docs/en/fullscreen#clear-the-conversation) for how Cmd+K behaves on iTerm2 and Terminal.app |
100| `chat:killAgents` | Ctrl+X Ctrl+K | Stop all running [background subagents](/docs/en/sub-agents#run-subagents-in-foreground-or-background) in this session and turn off [artifact auto-replies](/docs/en/artifacts#let-claude-reply-to-comments-on-its-own) for the rest of it |
101| `chat:cycleMode` | Shift+Tab\* | Cycle permission modes |
102| `chat:modelPicker` | Meta+P | Open model picker |
103| `chat:fastMode` | Meta+O | Toggle fast mode |
104| `chat:thinkingToggle` | Meta+T | Toggle extended thinking |
105| `chat:submit` | Enter | Submit message |
106| `chat:newline` | Ctrl+J | Insert a newline without submitting |
107| `chat:undo` | Ctrl+\_, Ctrl+Shift+- | Undo last action |
108| `chat:externalEditor` | Ctrl+G, Ctrl+X Ctrl+E | Open in external editor |
109| `chat:stash` | Ctrl+S | Stash current prompt |
110| `chat:imagePaste` | Ctrl+V (Alt+V on Windows and WSL) | Paste image from clipboard. On WSL, both shortcuts are bound by default |
95| Action | Default | Description |
96| :-------------------- | :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
97| `chat:cancel` | Escape | Cancel current input |
98| `chat:clearInput` | Ctrl+L | Force a full screen redraw, preserving input and conversation |
99| `chat:clearScreen` | Cmd+K | Force a full screen redraw, preserving input and conversation. See [Clear the conversation](/docs/en/fullscreen#clear-the-conversation) for how Cmd+K behaves on iTerm2 and Terminal.app |
100| `chat:killAgents` | Ctrl+X Ctrl+K | Stop all running [background subagents](/docs/en/sub-agents#run-subagents-in-foreground-or-background) in this session and turn off [artifact auto-replies](/docs/en/artifacts#let-claude-reply-to-comments-on-its-own) for the rest of it |
101| `chat:cycleMode` | Shift+Tab\* | Cycle permission modes |
102| `chat:modelPicker` | Meta+P | Open model picker |
103| `chat:fastMode` | Meta+O | Toggle fast mode |
104| `chat:thinkingToggle` | Meta+T | Toggle extended thinking |
105| `chat:submit` | Enter | Submit message |
106| `chat:queueSubmit` | Ctrl+X Enter | Submit the message, marked to wait its turn: while Claude is working, Claude Code [queues it](/docs/en/interactive-mode#queue-messages-while-claude-works) and never interrupts the turn. Unlike `chat:submit`, it submits the draft even while autocomplete suggestions are open. Requires v2.1.247 or later |
107| `chat:newline` | Ctrl+J | Insert a newline without submitting |
108| `chat:undo` | Ctrl+\_, Ctrl+Shift+- | Undo last action |
109| `chat:externalEditor` | Ctrl+G, Ctrl+X Ctrl+E | Open in external editor |
110| `chat:stash` | Ctrl+S | Stash current prompt |
111| `chat:imagePaste` | Ctrl+V (Alt+V on Windows and WSL) | Paste image from clipboard. On WSL, both shortcuts are bound by default |
111112 
112113\*On Windows without VT mode (Node \<24.2.0/\<22.17.0, Bun \<1.2.23), defaults to Meta+M.
113114 
from line 376
375376 
376377Claude Code parses key names case-insensitively, so `K` is the same binding as `k` and `ctrl+K` is the same as `ctrl+k`. To bind Shift and a letter, write `shift+k`.
377378 
379### Non-US keyboard layouts
380 
381Write the key names of Ctrl shortcuts as Latin characters even when your active keyboard layout types other characters.
382 
383How Claude Code matches the key you press to a binding depends on the kind of layout:
384 
385* Under a non-Latin layout such as Cyrillic, in a terminal that uses the Kitty keyboard protocol and reports the key's US-layout position, Claude Code matches Ctrl shortcuts by that position, so with a Russian layout active, pressing Ctrl and the physical W key triggers `ctrl+w`. In a terminal that doesn't report the position, Claude Code matches whatever the terminal sends for the keypress: an ASCII control code triggers the Latin shortcut, and a keypress that arrives as the Cyrillic character matches no binding
386* Under layouts that rearrange Latin letters, such as AZERTY, Claude Code matches the letter that the key types, so pressing Ctrl and the key labeled A triggers `ctrl+a`
387 
388Before v2.1.247, pressing a Ctrl shortcut under a non-Latin layout didn't trigger its binding in terminals that use the Kitty keyboard protocol, such as Ghostty, Kitty, WezTerm, and iTerm2.
389 
378390### Chords
379391 
380392Chords are sequences of keystrokes separated by spaces:
from line 426
414426 
415427This also works for chord bindings. Unbinding every chord that shares a prefix frees that prefix for use as a single-key binding. A chord in any active context keeps its prefix reserved, so you must unbind each chord in the context that defines it.
416428 
417The default `Ctrl+X` family spans two contexts: `ctrl+x ctrl+k` and `ctrl+x ctrl+e` in `Chat`, and `ctrl+x ctrl+b` in `Task`. To reclaim `ctrl+x` itself as a single-key binding, unbind all of them:
429Claude Code binds these default chords on the `ctrl+x` prefix: `ctrl+x ctrl+k`, `ctrl+x ctrl+e`, and `ctrl+x enter` in `Chat`, and `ctrl+x ctrl+b` in `Task`. The `ctrl+x enter` chord requires v2.1.247 or later. To reclaim `ctrl+x` itself as a single-key binding, unbind all of them:
418430 
419431```json theme={null}
420432{
from line 442
430442 "bindings": {
431443 "ctrl+x ctrl+k": null,
432444 "ctrl+x ctrl+e": null,
445 "ctrl+x enter": null,
433446 "ctrl+x": "chat:newline"
434447 }
435448 }
from line 456
443456 
444457These shortcuts cannot be rebound:
445458 
446| Shortcut | Reason |
447| :-------- | :--------------------------------------------- |
448| Ctrl+C | Hardcoded interrupt/cancel |
449| Ctrl+D | Hardcoded exit |
450| Ctrl+M | Identical to Enter in terminals (both send CR) |
451| Caps Lock | Not delivered to terminal applications |
459| Shortcut | Reason |
460| :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
461| Ctrl+C | Hardcoded interrupt/cancel |
462| Ctrl+D | Hardcoded exit |
463| Ctrl+M | Claude Code always receives it as Enter |
464| Ctrl+\[ | Claude Code always receives it as Escape |
465| Ctrl+I | Claude Code always receives it as Tab |
466| Ctrl+H | Sends the ASCII backspace byte. [How Claude Code reads it on Windows](/docs/en/terminal-config#fix-backspace-deleting-a-whole-word-on-windows) depends on your terminal and the [`CLAUDE_CODE_BS_AS_CTRL_BACKSPACE`](/docs/en/env-vars) environment variable |
467| Caps Lock | Not delivered to terminal applications |
452468 
453469## Terminal conflicts
454470 
from line 495
479495* Parse errors (invalid JSON or structure)
480496* Invalid context names
481497* Invalid action values, such as an action that isn't a string or `null`
498* Unknown action names, such as a typo of a registered action. Claude Code skips the binding and keeps any default binding for that key in effect. Before v2.1.246, a binding with an unknown action name silently disabled that key
482499* Reserved shortcut conflicts
483500* Duplicate bindings in the same context
484501 
Feedback