Keyboard shortcuts
Keyboard shortcuts may vary by platform and terminal. In fullscreen rendering, press
? in the transcript viewer to see available shortcuts there.macOS users: Option/Alt key shortcuts (Alt+B, Alt+F, Alt+Y, Alt+P) require configuring Option as Meta in your terminal. See Enable Option key shortcuts on macOS for the setting in each terminal.General controls
Text editing
Theme and display
Multiline input
Quick commands
Transcript viewer
When the transcript viewer is open (toggled withCtrl+O), these shortcuts are available. Run /tui with no argument to check which renderer is active. Ctrl+E can be rebound via transcript:toggleShowAll.
Voice input
Commands
Type/ in Claude Code to see all available commands, or type / followed by any letters to filter. The / menu shows everything you can invoke: built-in commands, bundled and user-authored skills, and commands contributed by plugins and MCP servers. Not all built-in commands are visible to every user since some depend on your platform or plan.
In fullscreen rendering, the / command and @ file suggestion lists also respond to the mouse: hovering highlights a row and clicking accepts it.
See the commands reference for the full list of commands included in Claude Code.
Vim editor mode
Enable vim-style editing via/config → Editor mode.
Mode switching
Remap INSERT-mode key sequences
ThevimInsertModeRemaps setting maps a two-key INSERT-mode sequence to Escape, so a mapping like jj returns you to NORMAL mode. Requires Claude Code v2.1.208 or later.
The following ~/.claude/settings.json example turns on vim mode and maps jj to Escape:
"<Esc>" is the only supported target. Entries with a different length or target are ignored.
Typing the first character of a sequence inserts it normally. Pressing the second character within one second removes that pending character and switches to NORMAL mode, leaving neither character in your input. After the one-second window, or if a different key follows, both characters stay as literal text, so you can still type a word containing the sequence by pausing between the two keys.
Claude Code reads this setting from your user settings file, the --settings flag, and managed settings only. Entries in a project’s .claude/settings.json or .claude/settings.local.json are ignored, so a checked-out repository can’t remap your keystrokes.
Navigation (NORMAL mode)
In vim NORMAL mode, if the cursor is at the beginning or end of input and can’t move further,
j/k and ↑/↓ navigate command history instead. ← on an empty prompt opens agent view from NORMAL mode as well as INSERT; before v2.1.219, ← on an empty prompt did nothing in NORMAL mode.Editing (NORMAL mode)
Text objects (NORMAL mode)
Text objects work with operators liked, c, and y:
Visual mode
Pressv for character-wise selection or V for line-wise selection. Motions extend the selection, and operators act on it directly.
Block-wise visual mode with
Ctrl+V is not supported.
Command history
Claude Code keeps a history of the prompts you type, and Up-arrow recall reaches prompts from past sessions of the same project:- Input history is stored per working directory
- Running
/clearstarts a new session: recall then lists the new session’s prompts first, with earlier sessions’ prompts after them. The previous session’s conversation is preserved and can be resumed. - Submitting the same prompt twice in a row records one history entry, so pressing Up steps to the previous distinct prompt
- When you recall a prompt that included pasted text, Claude Code sends the full pasted content again when you resubmit. If the content has since been cleaned up, Claude Code doesn’t send the literal
[Pasted text #N]string; see Paste large content for what happens to the prompt - History expansion with
!is disabled by default
Reverse search with Ctrl+R
PressCtrl+R to interactively search through your command history. In fullscreen rendering, Ctrl+R opens a search dialog instead: type to filter, press Up and Down to move through matches, and press Ctrl+S to cycle the scope through this session, this project, and all projects. Press Enter or Tab to place a match in the prompt input, or Esc to cancel. The steps below describe the classic renderer’s inline search:
- Start search: press
Ctrl+Rto activate reverse history search - Type query: enter text to search for in previous commands. The search term is highlighted in matching results
- Navigate matches: press
Ctrl+Ragain to cycle through older matches - Search scope: the inline search always searches prompts from all projects
- Accept match:
- Press
TaborEscto accept the current match and continue editing - Press
Enterto accept and execute the command immediately
- Press
- Cancel search:
- Press
Ctrl+Cto cancel and restore your original input - Press
Backspaceon empty search to cancel
- Press
Background Bash commands
Claude Code supports running Bash commands in the background, allowing you to continue working while long-running processes execute.How backgrounding works
When Claude Code runs a command in the background, it runs the command asynchronously and immediately returns a background task ID. Claude Code can respond to new prompts while the command continues executing in the background. To run commands in the background, you can either:- Prompt Claude Code to run a command in the background
- Press
Ctrl+Bto move a regular Bash tool invocation to the background. Tmux users must pressCtrl+Btwice due to tmux’s prefix key.
- Output is written to a file and Claude can retrieve it using the Read tool
- Background tasks have unique IDs for tracking and output retrieval
- Background tasks are automatically cleaned up when Claude Code exits. If you background the session instead of exiting it, Claude Code hands them to the background session, where they keep running. See background a running session
- Background tasks are automatically terminated if output exceeds 5GB, with a note in stderr explaining why
- On macOS and Linux, Claude Code terminates running background tasks when the operating system signals memory pressure, provided the session has been idle for at least 30 minutes and no turn or subagent is running. Set
CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAPto1to turn this off. Requires Claude Code v2.1.193 or later. Background commands owned by a subagent are instead terminated after 60 minutes, configurable in milliseconds withCLAUDE_SUBAGENT_BG_SHELL_MAX_MS. A command owned by a subagent running in the foreground also ends when that subagent gives its final response; see Background commands in the tools reference. Before v2.1.218, neither the memory-pressure reap nor the 60-minute limit covered commands moved to the background withCtrl+B
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS environment variable to 1. See Environment variables for details.
Common backgrounded commands:
- Build tools (webpack, vite, make)
- Package managers (npm, yarn, pnpm)
- Test runners (jest, pytest)
- Development servers
- Long-running processes (docker, terraform)
Shell mode with ! prefix
Run shell commands directly without going through Claude by prefixing your input with !:
- Adds the command and its output to the conversation context
- Shows real-time progress and output
- Supports the same
Ctrl+Bbackgrounding for long-running commands - Doesn’t require Claude to interpret or approve the command
- Supports history-based autocomplete: type a partial command and press
Tabto complete from previous!commands in the current project - Supports live file path autocomplete as of v2.1.193 on all platforms: type a token containing a forward slash, such as
./src/or~/, to see a dropdown of matching files and directories, then pressTabto accept. Use forward slashes on Windows too; the dropdown is triggered by/, not\ - Exit with
Escape,Backspace, orCtrl+Uon an empty prompt - Pasting text that starts with
!into an empty prompt enters shell mode automatically, matching typed!behavior
! npm test and get an explanation of the failures without a second prompt. The response costs the same as sending a normal prompt. To restore the earlier behavior where the output is added to context without a response, set respondToBashCommands to false in settings.json. Before v2.1.186, shell mode always added output to context without a response.
Prompt suggestions
When you first open a session, Claude Code shows a grayed-out example command in the prompt input to help you get started. It picks this from your project’s git history, so the example reflects files you’ve been working on recently. After Claude responds, Claude Code can suggest your next prompt based on your conversation history, such as a follow-up step from a multi-part request or a natural continuation of your workflow.- Press
TaborRight arrowto place the suggestion in the prompt input, thenEnterto submit - Start typing to dismiss it
When Claude Code skips suggestions
In interactive mode, Claude Code leaves prompt suggestions off by default and hides the Prompt suggestions toggle in/config when it doesn’t evaluate feature flags. That happens in these cases:
- You use Amazon Bedrock, Claude Platform on AWS, Google Cloud’s Agent Platform, or Microsoft Foundry as the model provider, unless a host platform that embeds Claude Code sets
CLAUDE_CODE_PROVIDER_MANAGED_BY_HOSTto a true value such as1 - You are signed in to a Claude apps gateway
- You set
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC,DISABLE_TELEMETRY,DO_NOT_TRACK, orDISABLE_GROWTHBOOKto a value that turns off feature-flag evaluation
- The prompt cache is cold, to avoid unnecessary cost
- After the first turn of a conversation, in some sessions
- The previous response ended in an error
- While you’re in plan mode
- In an agent team, in teammates’ sessions by default. The lead’s session shows suggestions
--prompt-suggestions with -p "<prompt>" --output-format stream-json --verbose to have Claude Code emit a prompt_suggestion message after each turn that generates one. The generator skips very short conversations and cold prompt caches here too, so a single short -p query can emit none.
Turn prompt suggestions off
To disable prompt suggestions entirely, use any of the following:- Turn off Prompt suggestions in
/config - Set
promptSuggestionEnabledtofalsein your settings file - Set the
CLAUDE_CODE_ENABLE_PROMPT_SUGGESTIONenvironment variable tofalse, which takes precedence over the setting:
promptSuggestionEnabled to false in managed settings. Also set CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION to false under the managed env key so that users can’t re-enable them with their own environment variable.
Emoji shortcodes
Type a: followed by an emoji shortcode in the prompt input to insert the emoji. Requires Claude Code v2.1.217 or later.
- Type a complete shortcode such as
:heart:and Claude Code replaces it with ❤️ as soon as you type the closing: - Type
:plus at least two characters of a name, such as:hea, to open a suggestion popup, then pressTaborEnterto insert the highlighted emoji
: inside a word or URL doesn’t open suggestions.
To turn the feature off, set emojiCompletionEnabled to false in settings.json. This disables both the suggestion popup and the inline replacement.
Side questions with /btw
Use/btw to ask a question about your current work without adding to the conversation history.
x to clear the earlier exchanges, and it’s gone when you exit Claude Code.
In the VS Code extension’s chat panel, /btw opens a panel rather than the overlay this section describes, and you ask follow-up questions right in the panel. The panel’s thread survives window reloads, on the retention schedule that page describes. You need the extension at v2.1.227 or later. Earlier extension versions don’t offer /btw.
- Available while Claude is working: you can run
/btweven while Claude is processing a response. The side question runs independently and doesn’t interrupt the main turn. It sees everything in the conversation so far, except the reply Claude is still writing. - No tool access: side questions answer only from what is already in context. Claude can’t read files, run commands, or search when answering a side question.
- Single response: there are no follow-up turns in the overlay. To continue the thread, ask another
/btwquestion. To continue with full tool access, fork this question and answer into their own session withf. - Low cost: while the conversation’s prompt cache is warm, a side question costs little beyond the answer itself.
/btw with no question. The overlay reopens on your most recent exchange. Press Left to step back through earlier answers. Before v2.1.212, /btw without a question printed a usage message instead.
Once the answer appears, the overlay accepts these keys.
/btw is the inverse of a subagent: it sees your full conversation but has no tools, while a subagent has full tools but starts with an empty context. Use /btw to ask about what Claude already knows from this session; use a subagent to go find out something new.
Task list
The task list is Claude’s to-do checklist: items Claude created to plan multi-step work, with indicators showing what’s pending, in progress, or complete. It’s separate from the background-task view. To see running shells and subagents, use/tasks instead.
On Opus 4.8, Sonnet 5, Fable 5, Mythos 5, and later versions of those families, Claude keeps track of multi-step work without a written checklist, and Claude Code doesn’t provide the tools that fill this list, so it stays empty. If you’d like the task list on those models anyway, opt in with CLAUDE_CODE_ENABLE_TODO_TOOLS=1 or one of the other ways under Task tool availability. On earlier models such as Opus 4.7, and after you opt in, the task list works as follows:
- Press
Ctrl+Tto toggle the task list view. The display shows up to five tasks at a time. When Claude hasn’t created any checklist items yet, the toggle has no visible effect because there’s nothing to display - To see all tasks or clear them, ask Claude directly: “show me all tasks” or “clear all tasks”
- Tasks persist across context compactions, helping Claude stay organized on larger projects
- To share a task list across sessions, set
CLAUDE_CODE_TASK_LIST_IDto use a named directory in~/.claude/tasks/:CLAUDE_CODE_TASK_LIST_ID=my-project claude
Session recap
When you return to the terminal after stepping away, Claude Code shows a one-line recap of what happened in the session so far. The recap generates in the background once at least three minutes have passed since the last completed turn and the terminal is unfocused, so it’s ready when you switch back. Recaps only appear once the session has at least three turns, and never twice in a row. Run/recap to generate a summary on demand. To turn automatic recaps off, open /config and disable Session recap.
Session recap is on by default for every plan and provider. The recap is always skipped in non-interactive mode.
PR review status
When working on a branch with an open pull request, Claude Code displays a clickable PR link in the footer, such as “PR #446”. The link has a colored underline indicating the review state:- Green: approved
- Yellow: pending review
- Red: changes requested
- Gray: draft
Cmd+click (macOS) or Ctrl+click (Windows/Linux) the link to open the pull request in your browser. The status refreshes every 60 seconds, and immediately after a gh pr or git push command runs in the session.
Claude Code renders the badge as a hyperlink even when it can’t detect hyperlink support in your terminal, which commonly happens over SSH or in tmux. Set FORCE_HYPERLINK=0 to render the badge as plain text.
PR status requires the
gh CLI to be installed and authenticated (gh auth login).See also
- Skills - Custom prompts and workflows
- Checkpointing - Rewind Claude’s edits and restore previous states
- CLI reference - Command-line flags and options
- Settings - Configuration options
- Memory management - Managing CLAUDE.md files