Skip to content

Terminal keyboard map

Every terminal app shortcut, and how to rebind them in keybindings.json.

These tables come from the app's own keybinding definitions. CtrlY shows the same list in the app.

zidane
The keybindings panel, opened with Ctrl+Y.

Global#

Keybindings, Global
ActionKeysDescription
SettingsopenSettingsctrl OOpen settings.
SessionopenSessionDetailsctrl shift XOpen session details: stats, export, rename, delete.Needs the kitty keyboard protocol: macOS Terminal.app drops shift, so rebind it there.
New sessionnewSessionctrl NStart a new session with the current model.
ModelopenModelPickerctrl MOpen the model picker.
OptionsopenEffortPickerctrl LOpen model options, like reasoning effort and fast mode.
TodosopenTodosctrl TOpen the run's todo list.
PanelopenArtifactsctrl shift AShow or hide the side panel.Needs the kitty keyboard protocol: macOS Terminal.app drops shift, so rebind it there.
Next panelpanelNextctrl shift ]Open the next side-panel tab.Needs the kitty keyboard protocol: macOS Terminal.app drops shift, so rebind it there.
Previous panelpanelPrevctrl shift [Open the previous side-panel tab.Needs the kitty keyboard protocol: macOS Terminal.app drops shift, so rebind it there.
Next spacenextSpacectrl shift →Show the next space (Spaces on); from a chat, the sessions list opens on it.Needs the kitty keyboard protocol: macOS Terminal.app drops shift, so rebind it there.
Previous spaceprevSpacectrl shift ←Show the previous space (Spaces on); from a chat, the sessions list opens on it.Needs the kitty keyboard protocol: macOS Terminal.app drops shift, so rebind it there.
ContextopenContextPanelctrl shift GShow what fills the context window.Needs the kitty keyboard protocol: macOS Terminal.app drops shift, so rebind it there.
Main sessionopenMainSessionctrl shift MOpen the Main session for this directory, or create it. Needs the "Main session" and "Use daemon runtime" settings.Needs the kitty keyboard protocol: macOS Terminal.app drops shift, so rebind it there.
UsageopenUsagePanelctrl POpen plan limits and credits for each provider.
KeybindingsopenKeybindingsctrl YList every shortcut.
PaletteopenPalettectrl shift PSearch actions, commands, sessions and settings.Needs the kitty keyboard protocol: macOS Terminal.app drops shift, so rebind it there.
Cycle agentcycleAgentshift tabSwitch to the next agent profile.
MessagesenterSelectTurnModectrl SSelect a previous message.
Cancel toolcancelToolCallctrl KCancel one tool call and keep the run going.
AbortabortRunctrl escStop the run and deny pending approvals. If your terminal cannot send ctrl+esc, rebind it.Some terminals cannot report ctrl+esc: rebind it there.
RetryresumeRunctrl RPick up the run that stopped: retry, continue, or sign in again when a sign-in stopped it.
CwdchangeCwdctrl HChange the working directory.
Paste clipboardattachClipboardImagectrl VPaste text or an image from the system clipboard.
Edit in $EDITORopenExternalEditorctrl GWrite the prompt in $EDITOR or $VISUAL. Needs the "Edit prompt in $EDITOR" setting.

Chords with CtrlShift need a terminal that reports the kitty keyboard protocol, such as kitty, WezTerm or Ghostty. On macOS, Terminal.app drops Shift, so CtrlShiftX arrives as CtrlX. In Terminal.app, rebind these actions to chords without Shift.

Sessions list#

Keybindings, Sessions
ActionKeysDescription
Next spacecycleSpaceInListshift tabShow the next space in the sessions list (wraps), also while typing a search. Needs 2 or more spaces. In a chat, shift+tab still cycles agents.

These keys act only in the sessions list, so ShiftTab still cycles agents in a chat. ← → and a click on the space name in the title also switch spaces: sessions and forks.

Message queue#

Keybindings, Message queue
ActionKeysDescription
Select queueenterQueueSelectionUnboundSelect the queued messages (or press ↑ on an empty prompt).
PushpushQueuedMessagectrl enterSend the selected queued message into the running turn.
DropdropQueuedMessagebackspaceRemove the selected queued message.

↑ on an empty prompt enters the queue without a binding.

Messages and session details#

Keys inside an open message (fork, delete, copy, edit) and session details (export, compact, favorite and more) are on sessions and forks. They rebind in the same file.

Fixed keys#

KeyWhereDoes
EscChatGo to the sessions list
EscPopups, modals, search, queueClose or leave
EscFile-edit approvalDeny
EnterPromptSend
ShiftEnterPromptNew line
TabCompletion popupPick
?Empty promptSearch the conversation
!Empty promptShell mode
CtrlCAnywhereCopy the selection of the prompt or an input, else quit (Settings › UI › Ctrl+C behavior)
CtrlXPrompt or input with a selectionCut
← →SettingsSwitch tab
CtrlB CtrlFSettings › Keybindings and LogsScroll half a page up or down
Home EndSettings › Keybindings and LogsJump to the top or bottom
SpaceSetup wizardPick the row, or turn it on or off
EnterSetup wizardContinue
SSetup wizardSkip the step, if it can be skipped
EscSetup wizardGo back one step, or close a re-run on its first step

Settings tabs also have their own Ctrl keys, such as CtrlD to clear an extension secret: Settings, MCP, skills and extensions, remote hosts.

Rebind a key#

Shortcuts live in keybindings.json in your config folder (files and folders).

  1. Open Settings › Keybindings and press Enter. If the file does not exist, zidane creates it with every action and its default. The file opens in $VISUAL or $EDITOR. If neither is set, the system opener opens it (open on macOS, xdg-open on Linux).
  2. Change the values and save the file.
  3. Restart the app. zidane reads the file only at start.
keybindings.json
{
  // Terminal.app drops shift: give the session modal a plain chord.
  "openSessionDetails": "ctrl+e",
  // Two chords for one action.
  "abortRun": "ctrl+escape | ctrl+q",
  // An array also lists several chords.
  "openUsagePanel": ["ctrl+p", "alt+u"]
}
ExampleRule
ctrl+shift+pModifiers: ctrl, shift, alt (or option), meta (or cmd)
"ctrl+w | cmd+w"Several chords. An array (["ctrl+w", "cmd+w"]) also works.
Shift+Ctrl+PCase and modifier order do not matter
ctrl-p- also separates the parts
esc, enterKey names: escape (esc), return (enter), space, backspace, up, pgup, [

The file allows // and /* */ comments. If zidane cannot parse an entry, the action keeps its default. An empty value ("") also keeps the default, so it does not unbind a built-in action. If the whole file does not parse, every action keeps its default.

Extension shortcuts use the same file, keyed by their id. Settings › Keybindings lists each id. An extension shortcut cannot take Esc, CtrlEsc, CtrlC or a single letter without Ctrl, Alt or Cmd.

Bindings are the same on macOS and Linux, because the terminal reports the keys. Most terminals cannot send Cmd. The desktop app has its own Cmd map and reloads it without a restart: desktop keyboard.