Gemini CLI keyboard shortcuts
Gemini CLI ships with a set of default keyboard shortcuts for editing input, navigating history, and controlling the UI. Use this reference to learn the available combinations.
Basic Controls
| Command | Action | Keys |
|---|---|---|
basic.confirm | Confirm the current selection or choice. | Enter |
basic.cancel | Dismiss dialogs or cancel the current focus. | EscCtrl+[ |
basic.quit | Cancel the current request or quit the CLI when input is empty. | Ctrl+C |
basic.exit | Exit the CLI when the input buffer is empty. | Ctrl+D |
Cursor Movement
| Command | Action | Keys |
|---|---|---|
cursor.home | Move the cursor to the start of the line. | Ctrl+AHome |
cursor.end | Move the cursor to the end of the line. | Ctrl+EEnd |
cursor.up | Move the cursor up one line. | Up |
cursor.down | Move the cursor down one line. | Down |
cursor.left | Move the cursor one character to the left. | Left |
cursor.right | Move the cursor one character to the right. | RightCtrl+F |
cursor.wordLeft | Move the cursor one word to the left. | Ctrl+LeftAlt+LeftAlt+B |
cursor.wordRight | Move the cursor one word to the right. | Ctrl+RightAlt+RightAlt+F |
Editing
| Command | Action | Keys |
|---|---|---|
edit.deleteRightAll | Delete from the cursor to the end of the line. | Ctrl+K |
edit.deleteLeftAll | Delete from the cursor to the start of the line. | Ctrl+U |
edit.clear | Clear all text in the input field. | Ctrl+C |
edit.deleteWordLeft | Delete the previous word. | Ctrl+BackspaceAlt+BackspaceCtrl+W |
edit.deleteWordRight | Delete the next word. | Ctrl+DeleteAlt+DeleteAlt+D |
edit.deleteLeft | Delete the character to the left. | BackspaceCtrl+H |
edit.deleteRight | Delete the character to the right. | DeleteCtrl+D |
edit.undo | Undo the most recent text edit. | Cmd/Win+ZAlt+Z |
edit.redo | Redo the most recent undone text edit. | Ctrl+Shift+ZShift+Cmd/Win+ZAlt+Shift+Z |
Scrolling
| Command | Action | Keys |
|---|---|---|
scroll.up | Scroll content up. | Shift+Up |
scroll.down | Scroll content down. | Shift+Down |
scroll.home | Scroll to the top. | Ctrl+HomeShift+Home |
scroll.end | Scroll to the bottom. | Ctrl+EndShift+End |
scroll.pageUp | Scroll up by one page. | Page Up |
scroll.pageDown | Scroll down by one page. | Page Down |
History & Search
| Command | Action | Keys |
|---|---|---|
history.previous | Show the previous entry in history. | Ctrl+P |
history.next | Show the next entry in history. | Ctrl+N |
history.search.start | Start reverse search through history. | Ctrl+R |
history.search.submit | Submit the selected reverse-search match. | Enter |
history.search.accept | Accept a suggestion while reverse searching. | Tab |
Navigation
| Command | Action | Keys |
|---|---|---|
nav.up | Move selection up in lists. | Up |
nav.down | Move selection down in lists. | Down |
nav.dialog.up | Move up within dialog options. | UpK |
nav.dialog.down | Move down within dialog options. | DownJ |
nav.dialog.next | Move to the next item or question in a dialog. | Tab |
nav.dialog.previous | Move to the previous item or question in a dialog. | Shift+Tab |
Suggestions & Completions
| Command | Action | Keys |
|---|---|---|
suggest.accept | Accept the inline suggestion. | TabEnter |
suggest.focusPrevious | Move to the previous completion option. | UpCtrl+P |
suggest.focusNext | Move to the next completion option. | DownCtrl+N |
suggest.expand | Expand an inline suggestion. | Right |
suggest.collapse | Collapse an inline suggestion. | Left |
Text Input
| Command | Action | Keys |
|---|---|---|
input.submit | Submit the current prompt. | Enter |
input.newline | Insert a newline without submitting. | Ctrl+EnterCmd/Win+EnterAlt+EnterShift+EnterCtrl+J |
input.openExternalEditor | Open the current prompt or the plan in an external editor. | Ctrl+X |
input.paste | Paste from the clipboard. | Ctrl+VCmd/Win+VAlt+V |
App Controls
| Command | Action | Keys |
|---|---|---|
app.showErrorDetails | Toggle detailed error information. | F12 |
app.showFullTodos | Toggle the full TODO list. | Ctrl+T |
app.showIdeContextDetail | Show IDE context details. | Ctrl+G |
app.toggleMarkdown | Toggle Markdown rendering. | Alt+M |
app.toggleCopyMode | Toggle copy mode when in alternate buffer mode. | Ctrl+S |
app.toggleYolo | Toggle YOLO (auto-approval) mode for tool calls. | Ctrl+Y |
app.cycleApprovalMode | Cycle through approval modes: default (prompt), auto_edit (auto-approve edits), and plan (read-only). Plan mode is skipped when the agent is busy. | Shift+Tab |
app.showMoreLines | Expand and collapse blocks of content when not in alternate buffer mode. | Ctrl+O |
app.expandPaste | Expand or collapse a paste placeholder when cursor is over placeholder. | Ctrl+O |
app.focusShellInput | Move focus from Gemini to the active shell. | Tab |
app.unfocusShellInput | Move focus from the shell back to Gemini. | Shift+Tab |
app.clearScreen | Clear the terminal screen and redraw the UI. | Ctrl+L |
app.restart | Restart the application. | RShift+R |
app.suspend | Suspend the CLI and move it to the background. | Ctrl+Z |
app.showShellUnfocusWarning | Show warning when trying to move focus away from shell input. | Tab |
Background Shell Controls
| Command | Action | Keys |
|---|---|---|
background.escape | Dismiss background shell list. | Esc |
background.select | Confirm selection in background shell list. | Enter |
background.toggle | Toggle current background shell visibility. | Ctrl+B |
background.toggleList | Toggle background shell list. | Ctrl+L |
background.kill | Kill the active background shell. | Ctrl+K |
background.unfocus | Move focus from background shell to Gemini. | Shift+Tab |
background.unfocusList | Move focus from background shell list to Gemini. | Tab |
background.unfocusWarning | Show warning when trying to move focus away from background shell. | Tab |
Customizing Keybindings
You can add alternative keybindings or remove default keybindings by creating a
keybindings.json file in your home gemini directory (typically
~/.gemini/keybindings.json).
Configuration Format
The configuration uses a JSON array of objects, similar to VS Code's keybinding
schema. Each object must specify a command from the reference tables above and
a key combination.
[
{
"command": "edit.clear",
"key": "cmd+l"
},
{
// prefix "-" to unbind a key
"command": "-app.toggleYolo",
"key": "ctrl+y"
},
{
"command": "input.submit",
"key": "ctrl+y"
},
{
// multiple modifiers
"command": "cursor.right",
"key": "shift+alt+a"
},
{
// Some mac keyboards send "Å" instead of "shift+option+a"
"command": "cursor.right",
"key": "Å"
},
{
// some base keys have special multi-char names
"command": "cursor.right",
"key": "shift+pageup"
}
]
- Unbinding To remove an existing or default keybinding, prefix a minus sign
(
-) to thecommandname. - No Auto-unbinding The same key can be bound to multiple commands in different contexts at the same time. Therefore, creating a binding does not automatically unbind the key from other commands.
- Explicit Modifiers: Key matching is explicit. For example, a binding for
ctrl+fwill only trigger on exactlyctrl+f, notctrl+shift+foralt+ctrl+f. - Literal Characters: Terminals often translate complex key combinations
(especially on macOS with the
Optionkey) into special characters, losing modifier and keystroke information along the way. For example,shift+5might be sent as%. In these cases, you must bind to the literal character%as bindings toshift+5will never fire. To see precisely what is being sent, enableDebug Keystroke Loggingand hit f12 to open the debug log console. - Key Modifiers: The supported key modifiers are:
ctrlshift,alt(synonyms:opt,option)cmd(synonym:meta)
- Base Key: The base key can be any single unicode code point or any of the
following special keys:
- Navigation:
up,down,left,right,home,end,pageup,pagedown - Actions:
enter,escape,tab,space,backspace,delete,clear,insert,printscreen - Toggles:
capslock,numlock,scrolllock,pausebreak - Function Keys:
f1throughf35 - Numpad:
numpad0throughnumpad9,numpad_add,numpad_subtract,numpad_multiply,numpad_divide,numpad_decimal,numpad_separator
- Navigation:
Additional context-specific shortcuts
Option+B/F/M(macOS only): Are interpreted asCmd+B/F/Meven if your terminal isn't configured to send Meta with Option.!on an empty prompt: Enter or exit shell mode.?on an empty prompt: Toggle the shortcuts panel above the input. PressEsc,Backspace, any printable key, or a registered app hotkey to close it. The panel also auto-hides while the agent is running/streaming or when action-required dialogs are shown. Press?again to close the panel and insert a?into the prompt.Tab+Tab(while typing in the prompt): Toggle between minimal and full UI details when no completion/search interaction is active. The selected mode is remembered for future sessions. Full UI remains the default on first run, and singleTabkeeps its existing completion/focus behavior.Shift + Tab(while typing in the prompt): Cycle approval modes: default, auto-edit, and plan (skipped when agent is busy).\(at end of a line) +Enter: Insert a newline without leaving single-line mode.Escpressed twice quickly: Clear the input prompt if it is not empty, otherwise browse and rewind previous interactions.Up Arrow/Down Arrow: When the cursor is at the top or bottom of a single-line input, navigate backward or forward through prompt history.Number keys (1-9, multi-digit)inside selection dialogs: Jump directly to the numbered radio option and confirm when the full number is entered.Ctrl + O: Expand or collapse paste placeholders ([Pasted Text: X lines]) inline when the cursor is over the placeholder.Ctrl + X(while a plan is presented): Open the plan in an external editor to collaboratively edit or comment on the implementation strategy.Double-clickon a paste placeholder (alternate buffer mode only): Expand to view full content inline. Double-click again to collapse.
Limitations
- On Windows Terminal:
shift+enteris only supported in version 1.25 and higher.shift+tabis not supported on Node 20 and earlier versions of Node 22.
- On macOS's Terminal:
shift+enteris not supported.