Skip to content

Keymap editor does not delete or override defaults correctly #48725

@unikitty37

Description

@unikitty37

Reproduction steps

  1. Open the keymap editor.
  2. Click the Search by Keystroke button and press ⌥⌘T.
  3. You should see that "agent: new thread" and "pane: close other items" have this keystroke.
  4. Right-click on the "agent: new thread" line and choose Delete.
  5. Double-click on the "pane: close other items" line, click in Edit Keystroke, and press ⇧⌃⌘T.
  6. Click Save.
  7. Close and reopen the keymap editor, and search for ⌥⌘T.
  8. Search for "editor: wrap selections in tag" and try to assign it to ⌥⌘T.

Current vs. Expected behavior

Expected behaviour:

At the end of step 6, the keymap editor should be showing two entries:

  • "agent: new thread" with no keystroke next to it.
  • "pane: close other items" with ⇧⌃⌘T next to it.

At the end of step 7, there should be no matches.

Step 8 should not produce any warnings about clashing keystrokes, because the previous steps deleted one clashing binding and changed the other.

(Aside: ⌥⌘T should already be the default for "editor: wrap selections in tag" when using the TextMate base_keymap, because that is what it's bound to in TextMate…)

Actual behaviour

At the end of step 6, there are three entries:

  • <null> with ⌥⌘T (and the same context as the agent: new thread line, but with a source of "User").
  • agent: new thread with ⌥⌘T next to it, but it is now greyed out.
  • pane: close other items with ⌥⌘T next to it.

After step 7, the same results are achieved.

Step 8 produces a warning that there are 3 clashing bindings, when there were only 2 at the start of this.

The following entries have been added to keymap.json:

  {
    "context": "(AgentPanel && acp_thread)",
    "bindings": {
      "alt-cmd-t": null
    }
  },
  {
    "context": "Pane",
    "bindings": {
      "ctrl-cmd-shift-t": [
        "pane::CloseOtherItems",
        {
          "close_pinned": false
        }
      ]
    }
  }

Zed version and system specs

Zed: v0.222.4+stable.147.b385025df963c9e8c3f74cc4dadb1c4b29b3c6f0 (Zed)
OS: macOS 15.7.3
Memory: 64 GiB
Architecture: aarch64

Attach Zed log file

Zed.log

Sadly, this all appears to be Rust-related noise from another window and nothing much about the keymap editor :(

2026-02-08T11:42:54+00:00 INFO  [zed] ========== starting zed version 0.222.4+stable.147.b385025df963c9e8c3f74cc4dadb1c4b29b3c6f0, sha b385025 ==========
2026-02-08T11:42:54+00:00 INFO  [crashes] spawning crash handler process
2026-02-08T11:42:54+00:00 INFO  [zed] Using git binary path: "/Applications/Zed.app/Contents/MacOS/git"
2026-02-08T11:42:54+00:00 INFO  [crashes] connected to crash handler process after 100ms
2026-02-08T11:42:54+00:00 INFO  [crashes] crash handler registered
2026-02-08T11:42:54+00:00 INFO  [extension_host] extensions updated. loading 14, reloading 0, unloading 0
2026-02-08T11:42:54+00:00 INFO  [auto_update] Auto Update: checking for updates
2026-02-08T11:42:54+00:00 INFO  [workspace] Rendered first frame
2026-02-08T11:42:54+00:00 INFO  [sqlez::migrations] Found 16 foreign key relationships to check
2026-02-08T11:42:56+00:00 INFO  [util] set environment variables from shell:/bin/zsh, path:/Users/user/.local/share/mise/installs/node/22.21.1/bin:/Users/user/.local/share/mise/installs/ruby/3.3.4/bin:/Users/user/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/Users/user/.cargo/bin:/Users/user/Library/Application Support/JetBrains/Toolbox/scripts:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/Applications/Little Snitch.app/Contents/Components:/Applications/VMware Fusion Tech Preview.app/Contents/Public:/Users/user/Library/Application Support/JetBrains/Toolbox/scripts:/Users/user/.orbstack/bin
2026-02-08T11:42:56+00:00 ERROR [crates/git/src/repository.rs:847] Error { code: -3, klass: 6, message: "could not find repository at '/private/tmp/foo/sausage'" }
2026-02-08T11:42:56+00:00 ERROR [crates/project/src/git_store.rs:6045] opening repository at "/private/tmp/foo/sausage/.git"
2026-02-08T11:42:56+00:00 ERROR [crates/git_ui/src/git_panel.rs:3417] oneshot canceled
2026-02-08T11:42:56+00:00 INFO  [node_runtime] using Node.js found on PATH: SystemNodeRuntime { node: "/Users/user/.local/share/mise/installs/node/22.21.1/bin/node", npm: "/Users/user/.local/share/mise/installs/node/22.21.1/bin/npm", global_node_modules: "/Users/user/.local/share/mise/installs/node/22.21.1/lib/node_modules\n", scratch_dir: "/Users/user/Library/Application Support/Zed/node" }
2026-02-08T11:42:57+00:00 INFO  [lsp] starting language server process. binary path: "/Users/user/.local/share/mise/installs/node/22.21.1/bin/node", working directory: "/Users/user/.config/zed", args: ["/Users/user/Library/Application Support/Zed/languages/json-language-server/node_modules/vscode-langservers-extracted/bin/vscode-json-language-server", "--stdio"]
2026-02-08T11:42:58+00:00 INFO  [lsp] starting language server process. binary path: "/Users/user/Library/Application Support/Zed/languages/rust-analyzer/rust-analyzer-2026-02-02", working directory: "/private/tmp/foo/sausage", args: []
2026-02-08T11:42:58+00:00 WARN  [project::lsp_store::rust_analyzer_ext] Language server rust-analyzer (id 1) status update: Failed to discover workspace.
Consider adding the `Cargo.toml` of the workspace to the [`linkedProjects`](https://rust-analyzer.github.io/book/configuration.html#linkedProjects) setting.
2026-02-08T11:42:58+00:00 WARN  [project::lsp_store::rust_analyzer_ext] Language server rust-analyzer (id 1) status update: Failed to discover workspace.
Consider adding the `Cargo.toml` of the workspace to the [`linkedProjects`](https://rust-analyzer.github.io/book/configuration.html#linkedProjects) setting.
2026-02-08T11:42:58+00:00 ERROR [project::lsp_store::rust_analyzer_ext] Language server rust-analyzer (id 1) status update: Failed to discover workspace.
Consider adding the `Cargo.toml` of the workspace to the [`linkedProjects`](https://rust-analyzer.github.io/book/configuration.html#linkedProjects) setting.

Failed to load workspaces.
2026-02-08T11:42:58+00:00 ERROR [project::lsp_store::rust_analyzer_ext] Language server rust-analyzer (id 1) status update: Failed to discover workspace.
Consider adding the `Cargo.toml` of the workspace to the [`linkedProjects`](https://rust-analyzer.github.io/book/configuration.html#linkedProjects) setting.

Failed to load workspaces.
2026-02-08T11:42:58+00:00 ERROR [project::lsp_store::rust_analyzer_ext] Language server rust-analyzer (id 1) status update: Failed to discover workspace.
Consider adding the `Cargo.toml` of the workspace to the [`linkedProjects`](https://rust-analyzer.github.io/book/configuration.html#linkedProjects) setting.

Failed to load workspaces.
2026-02-08T11:47:29+00:00 INFO  [lsp] starting language server process. binary path: "/Users/user/Library/Application Support/Zed/languages/package-version-server/package-version-server-v0.0.10", working directory: "/Users/user/Library/Caches/Zed/.tmptFr7Hg", args: []
2026-02-08T11:47:29+00:00 INFO  [lsp] starting language server process. binary path: "/Users/user/.local/share/mise/installs/node/22.21.1/bin/node", working directory: "/Users/user/Library/Caches/Zed/.tmptFr7Hg", args: ["/Users/user/Library/Application Support/Zed/languages/json-language-server/node_modules/vscode-langservers-extracted/bin/vscode-json-language-server", "--stdio"]
2026-02-08T11:49:40+00:00 INFO  [lsp] starting language server process. binary path: "/Users/user/.local/share/mise/installs/node/22.21.1/bin/node", working directory: "/Users/user/.config/zed", args: ["/Users/user/Library/Application Support/Zed/languages/json-language-server/node_modules/vscode-langservers-extracted/bin/vscode-json-language-server", "--stdio"]
2026-02-08T11:49:51+00:00 INFO  [project::prettier_store] Starting prettier at path "/Users/user/Library/Application Support/Zed/prettier"
2026-02-08T11:49:51+00:00 INFO  [lsp] starting language server process. binary path: "/Users/user/.local/share/mise/installs/node/22.21.1/bin/node", working directory: "/Users/user/Library/Application Support/Zed/prettier", args: ["/Users/user/Library/Application Support/Zed/prettier/prettier_server.js", "/Users/user/Library/Application Support/Zed/prettier"]
2026-02-08T11:49:52+00:00 INFO  [project::prettier_store] Started default prettier in "/Users/user/Library/Application Support/Zed/prettier"
2026-02-08T11:50:43+00:00 INFO  [lsp] starting language server process. binary path: "/Users/user/.local/share/mise/installs/node/22.21.1/bin/node", working directory: "/Users/user/Library/Caches/Zed/.tmpUtdUt6", args: ["/Users/user/Library/Application Support/Zed/languages/json-language-server/node_modules/vscode-langservers-extracted/bin/vscode-json-language-server", "--stdio"]
2026-02-08T11:50:43+00:00 INFO  [lsp] starting language server process. binary path: "/Users/user/Library/Application Support/Zed/languages/package-version-server/package-version-server-v0.0.10", working directory: "/Users/user/Library/Caches/Zed/.tmpUtdUt6", args: []
2026-02-08T11:55:54+00:00 INFO  [project::lsp_store] stopping language server json-language-server
2026-02-08T11:55:54+00:00 INFO  [project::lsp_store] stopping language server package-version-server

Relevant Zed settings

settings.json
{
  "base_keymap": "TextMate",
}

Relevant Keymap

keymap.json

This is the "after" view — the last two entries are what was added.

// Zed keymap
//
// For information on binding keys, see the Zed
// documentation: https://zed.dev/docs/key-bindings
//
// To see the default key bindings run `zed: open default keymap`
// from the command palette.
[
  {
    "context": "Workspace",
    "bindings": {
      // "shift shift": "file_finder::Toggle"
    },
  },
  {
    "context": "Editor",
    "bindings": {
      "ctrl-w": "editor::SelectLargerSyntaxNode", // Expand Selection
      "ctrl-shift-w": "editor::SelectSmallerSyntaxNode", // Shrink Selection
      "ctrl-shift-k": "editor::DeleteLine",
      "cmd-ctrl-down": "editor::MoveLineDown",
      "cmd-ctrl-up": "editor::MoveLineUp",
      "cmd-left": [
        "editor::MoveToBeginningOfLine",
        {
          "stop_at_soft_wraps": false,
          "stop_at_indent": false,
        },
      ],
      "home": [
        "editor::MoveToBeginningOfLine",
        {
          "stop_at_soft_wraps": false,
          "stop_at_indent": false,
        },
      ],
      "ctrl-cmd-enter": ["workspace::SendKeystrokes", "cmd-right ; enter"],
      "ctrl-shift-j": "editor::JoinLines",
      "f1": "editor::Fold",
      "shift-f1": "editor::UnfoldLines",
      // "j k": ["workspace::SendKeystrokes", "escape"],
    },
  },
  {
    "context": "(AgentPanel && acp_thread)",
    "bindings": {
      "alt-cmd-t": null
    }
  },
  {
    "context": "Pane",
    "bindings": {
      "ctrl-cmd-shift-t": [
        "pane::CloseOtherItems",
        {
          "close_pinned": false
        }
      ]
    }
  }
]

(for AI issues) Model provider details

No response

If you are using WSL on Windows, what flavor of Linux are you using?

None

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:keymap editorfrequency:alwaysBug that happens for everyone on every platform no matter how they use Zedpriority:P2Average run-of-the-mill bugsstate:reproducibleVerified steps to reproduce included and someone on the team managed to reproduce

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions