Cheap wins: the keybindings that turn Cursor back into a proper editor
The thing nobody warns you about when you move to Cursor is that it inherits every VS Code shortcut you know and then parks new AI features on top of some of them. For the first week that feels fine. By week three you’ve hit Cmd+K expecting to open a link dialog in markdown, watched an inline edit box appear instead, pressed Escape, lost your place, and done it again forty minutes later.
That’s the whole problem. Not that the AI is bad. That your hands are faster than your intentions, and a decade of muscle memory doesn’t renegotiate because a startup shipped a fork.
The four keys Cursor takes over
Worth knowing exactly what moved before you change anything.
Cmd+K becomes inline edit: it opens a prompt box at your cursor or around your selection, and the model rewrites that region in place. In stock VS Code, Cmd+K is a chord prefix, so Cmd+K Cmd+S opens the keyboard shortcuts editor, Cmd+K Z goes to zen mode, Cmd+K V opens the markdown preview to the side. Cursor keeps most chords working, but the bare press now belongs to the AI, and if you’re a heavy chord user the timing gets ambiguous.
Cmd+L opens the chat panel with your selection attached. In VS Code, Cmd+L selects the current line, then expands the selection by a line on each subsequent press. If you use that for quick line surgery, you’ll notice its absence within an hour.
Cmd+I opens Composer, the multi-file agent. VS Code leaves Cmd+I to the built-in inline suggest trigger, which most people never touched, so this one is close to free.
Tab accepts the prediction. This is the one people underestimate, because Cursor’s tab model doesn’t only complete the line you’re on. It jumps you to the next place it thinks you’re going to edit, which means Tab is now sometimes a navigation key. That’s genuinely useful and it’s also the single biggest source of “wait, why is my cursor over there.”
Getting your keys back
Open the command palette with Cmd+Shift+P, run Preferences: Open Keyboard Shortcuts (JSON), and you get the same keybindings.json you’ve had since 2016. Cursor’s AI commands live under the cursor.* namespace, which makes them easy to move as a group.
The remap I settle on every time, on every machine:
[
{
"key": "cmd+l",
"command": "-cursor.openChat"
},
{
"key": "cmd+l",
"command": "expandLineSelection",
"when": "textInputFocus"
},
{
"key": "cmd+shift+l",
"command": "cursor.openChat"
}
]
The leading minus unbinds Cursor’s default. The second entry restores VS Code’s line selection. The third puts chat somewhere my hands were never going anyway. Three lines of JSON, and the paper cut is gone for good.
If you want Cmd+K back as a pure chord prefix, the same pattern works against cursor.inlineEdit, but think about it first. Inline edit on a selection is the single highest-value thing in the editor, and burying it behind a chord means you’ll stop reaching for it. I moved mine to Cmd+Shift+K, which normally deletes a line, and rebound delete-line to Cmd+Backspace. That trade has held up for about a year.
The two bindings worth adding
Most of this is defensive. Two additions are pure gain.
The first is a binding for cursor.acceptAndRun in the agent panel, or whatever your version calls the accept-diff action, so you’re not moving to the mouse forty times an hour. Check the exact command ID in the shortcuts editor, because Cursor renames these between releases more often than you’d like.
The second matters more: bind something to reject. By default you’re leaning on Escape, which is overloaded to the point of meaninglessness — it also closes the panel, dismisses the suggestion, and exits the box. When rejecting a diff costs the same keystroke as everything else, you stop rejecting diffs. You skim, you shrug, you accept. I use Cmd+Shift+Backspace, and the deliberate awkwardness of it is the point: it’s a decision, not a reflex.
That’s the actual argument for spending twenty minutes on this. Not speed. The accept and the reject should not feel identical to your hands, because on a tired Thursday afternoon your hands are making the call, not you.
What this doesn’t fix
Keybindings won’t save you from a bad agent run, they won’t make the model understand your monorepo, and they won’t stop you from accepting a diff that quietly deletes a test. This is housekeeping, not strategy.
But it’s housekeeping with a real return. Every collision you remove is a small tax you stop paying on every file you open, and unlike most of the advice about these tools, you can finish it before your coffee goes cold and never think about it again.
More field notes on Cursor
This piece is one entry in a running series on how AI coding tools change day-to-day engineering work. For more practical notes on Cursor specifically, browse the full set at /blog/tag/cursor/. For the wider view across every tool in the stack, the AI coding tag collects the whole archive in one place.
One email a month: the upcoming live event + free recording access for subscribers. No spam, unsubscribe anytime.