zed/assets/keymaps/linux/vscode.json
Kirill Bulatov 8c7811ea72
Split VSCode and Zed keymap files (#61532)
Currently, Zed's "VSCode" keymap has certain discrepancies that are not
changed for compatibility reasons, e.g. opening inline assistant is
different in each editor.

To simplify the transition, extract VSCode bindings its own keymap so in
the future it's simpler to accept changes to each keymap separately.

Caveat: people who had ever changed the keymap, will have VSCode keymap
in their settings which will change their bindings slightly after this
commit is released.

I had to introduce more logic to `null` handling as had to somehow
disable `ctrl-enter` on mac from spawning the inline assistant block for
VSCode keymap (it's cmd-i there).

Release Notes:

- Split VSCode and Zed keymap files
2026-07-24 07:54:03 +00:00

72 lines
2.2 KiB
JSON

[
// VS Code for Linux (and Windows). See: https://code.visualstudio.com/docs/reference/default-keybindings
//
// Zed's default keymap is close to VS Code's, so this overlay only contains
// the bindings where the two diverge.
{
"context": "Editor",
"use_key_equivalents": true,
"bindings": {
"shift-alt-f": "editor::Format", // Format Document (Windows-style; Linux `ctrl-shift-i` is a Zed default already)
"ctrl-k ctrl-f": "editor::FormatSelections", // Format Selection
"shift-alt-i": "editor::SplitSelectionIntoLines", // Insert cursor at end of each line selected
"alt-z": "editor::ToggleSoftWrap", // Toggle Word Wrap
"ctrl-shift-space": "editor::ShowSignatureHelp", // Trigger Parameter Hints
"ctrl-shift-a": "editor::ToggleBlockComments", // Toggle Block Comment
"ctrl-k f12": "editor::GoToDefinitionSplit", // Open Definition to the Side
},
},
{
"context": "Editor && mode == full",
"use_key_equivalents": true,
"bindings": {
// In VS Code `ctrl-k z` is Zen Mode; the word wrap toggle moves to `alt-z`.
"ctrl-k z": "workspace::ToggleCenteredLayout",
"ctrl-i": "assistant::InlineAssist", // Inline Chat
},
},
{
"context": "!AcpThread > Editor && mode == full",
"use_key_equivalents": true,
"bindings": {
"ctrl-enter": "editor::NewlineBelow", // Insert Line Below (Inline Chat lives on `ctrl-i`)
},
},
{
"context": "Terminal",
"use_key_equivalents": true,
"bindings": {
"ctrl-enter": null,
},
},
{
"context": "Workspace",
"use_key_equivalents": true,
"bindings": {
"f5": "debugger::Start", // Start Debugging
"ctrl-alt-i": "agent::ToggleFocus", // Open Chat
},
},
{
"context": "Workspace && debugger_running",
"use_key_equivalents": true,
"bindings": {
"f5": null,
},
},
{
"context": "Workspace && debugger_stopped",
"use_key_equivalents": true,
"bindings": {
"f5": "debugger::Continue",
},
},
{
"context": "Workspace && debugger_session",
"use_key_equivalents": true,
"bindings": {
"f10": "debugger::StepOver",
"f11": "debugger::StepInto",
},
},
]