Skip to content

Cursor keyboard shortcuts are VS Code keybindings attached to Cursor’s AI commands: inline edit, the Agent panel, adding a selection to chat, and accepting or rejecting proposed changes. Reports from the Cursor 3.x line disagree on several of these defaults (checked 2026-09-26), so the dependable set is the one confirmed in the Keyboard Shortcuts editor and pinned in keybindings.json.

This page is for developers who drive Cursor from the keyboard. You update Cursor, press the key that opened the Agent panel yesterday, and a different panel opens. Or a teammate’s cheat sheet says one key adds your selection to the current chat, and in your build it starts a new chat and drops the context you spent ten minutes building.

The page assumes Cursor is installed and you have opened the Agent panel at least once. If not, start with the Cursor quick start.

  • A worksheet of the Cursor actions worth binding, with a search term to start from in your build.
  • A two-minute procedure that confirms what a key does, and a log that proves it.
  • A keybindings.json pattern that pins your bindings, so an update cannot move them.
  • Three shortcut chains that end in evidence (a passing test, a clean diff) rather than in “accept all”.
  • Three copy-paste prompts for inline edit, Agent, and a keybinding audit.

Which Cursor shortcuts should you confirm first?

Section titled “Which Cursor shortcuts should you confirm first?”

Confirm these in your own build before you build muscle memory on them. Find each action in your own Keyboard Shortcuts editor, and read the key from there: defaults vary across the Cursor 3.x line (checked 2026-09-26). Command titles also differ between builds, so treat each term as a starting point: widen the search if it finds nothing, and narrow it (accept to accept all) if it finds dozens of rows.

ActionSuggested search term (try variants)
Inline edit on the selectioninline edit
Open or toggle the Agent panelagent
Send the selection to Agent chatchat
Add the selection to the current chatadd to chat
Accept a Tab suggestionaccept
Accept the next word of a suggestionpartial
Accept all proposed changesaccept all
Reject all proposed changesreject all
Start a new chatnew chat
Switch or open modesmode
Pick a modelmodel

Two bindings come from VS Code rather than from Cursor, and every other procedure on this page starts from them: the Command Palette (Cmd+Shift+P / Ctrl+Shift+P) and the Preferences: Open Keyboard Shortcuts command it runs.

What Cursor’s help lists for these shortcuts

Section titled “What Cursor’s help lists for these shortcuts”

On 2026-10-12 Cursor’s help lists the keys in the table below. Treat them as search starting points, not as a replacement for the confirm step. The keys are the Mac forms Cursor’s help gives, plus Ctrl+I, the Windows and Linux key for the Agent panel; read the Windows and Linux key for the other actions in your Keyboard Shortcuts editor. The check on 2026-09-26 found reports that disagreed on several defaults, so the worksheet’s search terms are still the way to confirm each key in your build. Where the Keyboard Shortcuts editor and Cursor’s list differ, trust the editor.

ActionKey
Open the Agent panelCmd+I (Ctrl+I on Windows and Linux)
Toggle SidepanelCmd+I or Cmd+L
Inline editCmd+K
Mode MenuCmd+. (period)
Rotate Agent modesShift+Tab
Loop between AI modelsCmd+/

Confirm what a Cursor shortcut does in two minutes

Section titled “Confirm what a Cursor shortcut does in two minutes”

Run this once per action in the worksheet, and again after every Cursor update that changes the Agent or chat UI.

  1. Open the Command Palette (Cmd+Shift+P / Ctrl+Shift+P) and run Preferences: Open Keyboard Shortcuts.
  2. Type the search term from the worksheet, for example add to chat. Cursor’s AI commands are listed beside the standard VS Code ones.
  3. Read four columns: Command, Keybinding, When and Source. Source tells you whether the binding is built in, from an extension, or yours.
  4. Right-click the row and choose Show Same Keybindings. Every other command on the same key appears; any whose When overlaps is a conflict.
  5. Right-click the row again and choose Copy Command ID. Paste the ID into the worksheet next to the action. You need it in the next section.

If a UI element has a button but you cannot find its command by search, right-click the button in the workbench and choose Configure Keybinding. The editor opens filtered to that command, with its when clause already filled in. This context-menu entry is a recent VS Code addition, so an older Cursor build may lack it (checked against the VS Code keybinding docs, September 2026). If it is missing, find the command by search instead.

The Keyboard Shortcuts editor shows what should happen. The troubleshooting log shows what did happen, which is the evidence you want before you rely on a key in a fast loop.

  1. Run Developer: Toggle Keyboard Shortcuts Troubleshooting from the Command Palette. The Output panel opens with the keybinding log.
  2. Put focus where you use the shortcut (the editor, the chat input or the terminal), because when clauses depend on focus.
  3. Press the key once.
  4. Read the last [KeybindingService] lines. A good result reads matched <command-id>, when: …, source: user (or built-in). Keyboard event cannot be dispatched on the final key, or a different command ID, means the key does not do what the worksheet says.
  5. Run the toggle command again to stop logging.

Pin your Cursor bindings in keybindings.json

Section titled “Pin your Cursor bindings in keybindings.json”

Pinning is how you stop an update from moving a key under you. A rule you write in keybindings.json is appended after the default rules, and rules are evaluated from the bottom up, so your rule wins over a changed default.

Open the file from the Keyboard Shortcuts editor with the Open Keyboard Shortcuts (JSON) button in the editor title bar. Then add one rule per action, using the IDs you copied:

[
{
// Inline edit on a combination Show Same Keybindings shows as free
"key": "cmd+alt+e",
"command": "INLINE_EDIT_COMMAND_ID",
"when": "editorTextFocus"
},
{
// Add the selection to the current chat, never a new one
"key": "cmd+alt+l",
"command": "ADD_TO_CHAT_COMMAND_ID",
"when": "editorTextFocus"
},
{
// Remove a default you keep hitting by accident: a "-" prefix makes a removal rule.
// Use the key your editor lists for reject all; cmd+backspace is a placeholder.
"key": "cmd+backspace",
"command": "-REJECT_ALL_COMMAND_ID"
}
]

Replace INLINE_EDIT_COMMAND_ID, ADD_TO_CHAT_COMMAND_ID and REJECT_ALL_COMMAND_ID with the IDs you copied with Copy Command ID. Never type a command ID from memory or from a blog post: VS Code does not validate command IDs in keybindings.json, so a mistyped or renamed ID fails silently and the key does nothing.

On Windows and Linux, do not translate cmd+alt to ctrl+alt (see the caution below), and be careful with chords (two-keypress sequences). If Show Same Keybindings shows Cursor’s inline edit on a single Ctrl+K in your build, do not start a chord with ctrl+k: it turns that press into a chord prefix. VS Code also uses the ctrl+k prefix for many of its own chords (for example ctrl+k ctrl+l, Toggle Fold). Use a ctrl+shift+alt combination instead:

[
{
// Inline edit on a combination Show Same Keybindings shows as free
"key": "ctrl+shift+alt+i",
"command": "INLINE_EDIT_COMMAND_ID",
"when": "editorTextFocus"
},
{
"key": "ctrl+shift+alt+h",
"command": "ADD_TO_CHAT_COMMAND_ID",
"when": "editorTextFocus"
},
{
// Use the key your editor lists for reject all; ctrl+backspace is a placeholder.
"key": "ctrl+backspace",
"command": "-REJECT_ALL_COMMAND_ID"
}
]

Before you save either block, run Show Same Keybindings on each key you plan to use and pick one with no row whose When overlaps.

To review what you have pinned, open the More Actions (…) menu in the Keyboard Shortcuts editor and choose Show User Keybindings; it applies the @source:user filter. keybindings.json is a user file, not a project file, so it does not travel with the repository. Keep a copy in your dotfiles if you move between machines.

Chain Cursor shortcuts into workflows that end in evidence

Section titled “Chain Cursor shortcuts into workflows that end in evidence”

A shortcut chain makes the agent faster. It does not make the result correct. Each chain below ends in a check that proves the change, so you can accept it without reading every line.

  1. Select the function that is wrong. A tight selection keeps the edit small.
  2. Press your inline-edit key and paste the first prompt below.
  3. Read the proposed diff for scope only: does it touch anything outside the selection?
  4. Accept, then run the test that covers the function from the terminal. If there is no test, ask Agent for one before you accept.
  1. Select the key code in the first file and press your add-to-chat key.
  2. Move to the second file, select, and press it again. Check the chat input: both selections should appear as context, in one chat.
  3. Focus the chat input and paste the second prompt below.
  4. Accept only after the test command and its result appear in the reply, and run that command yourself once.

To learn more about what context to add and how, see how to manage context in Cursor.

The accept-all key is the most dangerous binding in the worksheet, because it clears the review of a multi-file diff in one keypress. Use it at the end of a sequence, not in the middle:

  1. Let Agent finish, and ask it to run your type check, linter and tests.
  2. Read the command output in the reply, not the diff.
  3. Run the same commands yourself if the reply only summarises them.
  4. Run git status, then git diff --stat, in the terminal. If Agent’s edits already show there, the file list should match what you asked for; if not, check the file list in the Agent panel.
  5. Press accept-all.

If the file list surprises you, reject all and re-scope rather than editing the result by hand. The pattern of trusting evidence over diffs is covered in reading evidence instead of code.

Conflicts accumulate as you add extensions. Paste your file and the conflict list into Agent and let it do the cross-referencing.

Check the proposal with the troubleshooting log from the previous section before you keep it.

When Cursor keyboard shortcuts stop working

Section titled “When Cursor keyboard shortcuts stop working”

A key that worked yesterday opens something else. An update moved a default. Run the two-minute confirm procedure for that action, then pin it in keybindings.json so the next update cannot move it again.

A pinned binding does nothing. The command ID is wrong or was renamed. The troubleshooting log shows no matched line for your key, or a different command. Copy the ID again from the Keyboard Shortcuts editor and replace it.

A shortcut works in the editor but not in the chat input or the terminal. The when clause decides where a key works. Compare the When column with where your focus was; editorTextFocus does not match the terminal or the chat input.

Tab accepts the wrong suggestion, or nothing. Another completion extension claims Tab. Use Show Same Keybindings on tab, then remove the competing rule with a - removal rule or disable the extension.

The key in a cheat sheet is not the key you press. On a non-US layout, the editor displays shortcuts for your layout, so a punctuation key such as / can appear as a different combination. Record the key from your own editor, not from someone else’s list.

Nothing in keybindings.json takes effect. The most common cause is a JSON syntax error. Open the file, fix the error the editor underlines, and save; the file is watched, so rules apply without a restart.

These procedures come from VS Code’s keybinding system, which Cursor keeps, and were checked against VS Code’s own keybinding documentation in September 2026. A Cursor build based on an older VS Code release can lack a newer VS Code option. Configure Keybinding in a context menu is the newest one this page uses; if your build lacks it, use search in the Keyboard Shortcuts editor instead.