cmux-keyboard-shortcuts

cmux-keyboard-shortcuts

热门

指导并应用 cmux 键盘快捷键自定义。当用户要求自定义、重新绑定、解除绑定、重置、审计或创建 cmux 的快捷键模板时使用,包括 tmux 风格、Vim 风格、终端优先、浏览器重度、iTerm/Terminal 风格或代理分类布局。

2.5万Star
2063Fork
更新于 2026/7/24
SKILL.md
readonly只读
name
cmux-keyboard-shortcuts
description

指导并应用 cmux 键盘快捷键自定义。当用户要求自定义、重新绑定、解除绑定、重置、审计或创建 cmux 的快捷键模板时使用,包括 tmux 风格、Vim 风格、终端优先、浏览器重度、iTerm/Terminal 风格或代理分类布局。

cmux-keyboard-shortcuts

使用此技能将用户的工作流偏好转换为 ~/.config/cmux/cmux.json 中的 cmux 快捷键绑定。它应指导用户、提出紧凑模板、应用所选更改,并确认配置使用已识别的键进行解析。

前提条件

  • 尽可能从 cmux 检出或工作树根目录工作。
  • 每次读写都使用 skills/cmux-settings/scripts/cmux-settings。它读取 JSONC,原子写入,并验证 JSON 以及已识别的设置键。
  • 对于操作 ID,请阅读 skills/cmux-settings/references/shortcut-actions.md
  • 对于当前默认值,请阅读 web/data/cmux-shortcuts.tsSources/KeyboardShortcutSettings.swift
find_cmux_settings() {
  local root
  root="$(git -C "$(pwd)" rev-parse --show-toplevel 2>/dev/null || pwd)"
  for candidate in \
    "$root/skills/cmux-settings/scripts/cmux-settings" \
    "${CODEX_HOME:-$HOME/.codex}/skills/cmux-settings/scripts/cmux-settings" \
    "$HOME/.agents/skills/cmux-settings/scripts/cmux-settings"; do
    if [[ -x "$candidate" ]]; then
      printf '%s\n' "$candidate"
      return 0
    fi
  done
  return 1
}

if [[ -z "${CMUX_SETTINGS:-}" ]]; then
  CMUX_SETTINGS="$(find_cmux_settings)" || {
    echo "cmux-settings 助手未找到;请从 cmux 检出运行或安装 cmux-settings" >&2
    exit 1
  }
fi

快捷键模型

  • 设置路径:shortcuts.bindings.<actionId>
  • 单键:"cmd+b"
  • 和弦:["ctrl+b","c"]。第一个按键需要修饰键,除非键是空格。第二个按键可以是裸键。
  • 解除绑定:优先使用 null 进行显式解除绑定。"""none""clear""unbound""disabled" 是可接受的别名,但 null 是最清晰的 JSON 值,并与下面的模板匹配。
  • selectSurfaceByNumberselectWorkspaceByNumber 必须使用 1 到 9 的数字。cmd+1 表示完整的 cmd+1cmd+9 系列。
  • showHideAllWindowsglobalSearch 是系统级快捷键。它们不能是和弦,需要修饰键,并且如果被 macOS 保留可能会被拒绝。
  • showHideAllWindows 还需要设置 > 全局热键 > 启用系统级热键。绑定可以在 cmux.json 中验证,而该功能可能被禁用,因此警告用户在报告快捷键可用之前启用该设置。
  • unset 删除 cmux.json 中的覆盖。它不会清除通过设置 UI/UserDefaults 保存的快捷键更改。如果用户要求真正的内置默认值,告诉他们先清除文件管理的覆盖,然后使用设置 > 键盘快捷键 > 重置默认快捷键,之后在应用中验证。对于 showHideAllWindows,使用设置 > 全局热键将快捷键恢复为 ctrl+opt+cmd+.,因为键盘快捷键 > 重置默认快捷键有意跳过全局热键。
  • 保存 cmux.json 会实时重新加载。不要告诉用户重启 cmux。

工作流程

  1. 对请求进行分类:

    • 一次性重新绑定或解除绑定:将短语映射到操作 ID,应用它,验证,并报告先前的和新绑定。
    • 仅审计请求:检查当前绑定,验证,并总结覆盖/未绑定的快捷键,而不写入。
    • 重置请求:澄清用户是指文件管理的覆盖还是真正的内置默认值。对于文件管理的重置,对命名操作使用 unset。对于真正的内置默认值,删除文件覆盖并指导用户前往设置 > 键盘快捷键 > 重置默认快捷键;不要报告仅从 cmux-settings 恢复的内置默认值。如果包含 showHideAllWindows,还要指导他们前往设置 > 全局热键恢复 ctrl+opt+cmd+. 和启用开关。
    • 广泛的自定义请求:从“预设模板”中提出 3 到 5 个模板,并让用户选择。
    • 命名风格,如 tmux、Vim、iTerm、浏览器或代理分类:选择最接近的模板,显示更改的操作和可能的冲突,并在批量应用前询问,除非用户明确说要应用它。
  2. 检查现有配置:

    "$CMUX_SETTINGS" path
    "$CMUX_SETTINGS" get shortcuts.bindings 2>/dev/null || printf '{}\n'
    "$CMUX_SETTINGS" validate
    
  3. 在应用模板之前,为将要更改的每个操作快照先前的值。不存在的路径必须使用 unset 恢复;具有现有自定义值的路径必须使用 set <same-json-value> 恢复。

    "$CMUX_SETTINGS" get shortcuts.bindings.focusLeft 2>/dev/null || printf '<absent>\n'
    
  4. 仅应用所选的操作路径:

    "$CMUX_SETTINGS" set shortcuts.bindings.newSurface '["ctrl+b","c"]'
    "$CMUX_SETTINGS" set shortcuts.bindings.focusLeft cmd+opt+h
    "$CMUX_SETTINGS" set shortcuts.bindings.sendFeedback null
    "$CMUX_SETTINGS" validate
    
  5. 验证更改操作的读回:

    "$CMUX_SETTINGS" get shortcuts.bindings.newSurface
    
  6. 以模板名称、更改的操作和来自快照的确切恢复命令结束。仅对模板之前不存在的操作使用 unset;使用 set 恢复先前的自定义绑定。

预设模板

将这些用作建议模板。逐个操作应用,而不是覆盖整个 shortcuts.bindings 对象。

Tmux 前缀

适用于希望拥有一个终端风格快捷键命名空间并接受 ctrl+b 启动 cmux 和弦而不是直接进入 shell 的用户。

"$CMUX_SETTINGS" set shortcuts.bindings.newSurface '["ctrl+b","c"]'
"$CMUX_SETTINGS" set shortcuts.bindings.closeTab '["ctrl+b","x"]'
"$CMUX_SETTINGS" set shortcuts.bindings.nextSurface '["ctrl+b","n"]'
"$CMUX_SETTINGS" set shortcuts.bindings.prevSurface '["ctrl+b","p"]'
"$CMUX_SETTINGS" set shortcuts.bindings.selectSurfaceByNumber '["ctrl+b","1"]'
"$CMUX_SETTINGS" set shortcuts.bindings.splitRight '["ctrl+b","v"]'
"$CMUX_SETTINGS" set shortcuts.bindings.splitDown '["ctrl+b","s"]'
"$CMUX_SETTINGS" set shortcuts.bindings.focusLeft '["ctrl+b","h"]'
"$CMUX_SETTINGS" set shortcuts.bindings.focusDown '["ctrl+b","j"]'
"$CMUX_SETTINGS" set shortcuts.bindings.focusUp '["ctrl+b","k"]'
"$CMUX_SETTINGS" set shortcuts.bindings.focusRight '["ctrl+b","l"]'
"$CMUX_SETTINGS" set shortcuts.bindings.toggleSplitZoom '["ctrl+b","z"]'
"$CMUX_SETTINGS" set shortcuts.bindings.toggleTerminalCopyMode '["ctrl+b","["]'
"$CMUX_SETTINGS" set shortcuts.bindings.equalizeSplits '["ctrl+b","="]'

macOS Terminal/iTerm 恢复

适用于希望表面、分割和标签行为再次感觉像常见 macOS 终端的用户。当没有设置 UI 覆盖时,这些操作已经匹配 cmux 内置默认值,因此取消设置文件覆盖而不是写入默认值。

"$CMUX_SETTINGS" unset shortcuts.bindings.newSurface
"$CMUX_SETTINGS" unset shortcuts.bindings.closeTab
"$CMUX_SETTINGS" unset shortcuts.bindings.nextSurface
"$CMUX_SETTINGS" unset shortcuts.bindings.prevSurface
"$CMUX_SETTINGS" unset shortcuts.bindings.selectSurfaceByNumber
"$CMUX_SETTINGS" unset shortcuts.bindings.splitRight
"$CMUX_SETTINGS" unset shortcuts.bindings.splitDown
"$CMUX_SETTINGS" unset shortcuts.bindings.toggleSplitZoom
"$CMUX_SETTINGS" unset shortcuts.bindings.toggleTerminalCopyMode
"$CMUX_SETTINGS" unset shortcuts.bindings.renameTab

Vim 窗格导航

适用于希望快速移动窗格而不使用前缀且不依赖方向键的用户。

"$CMUX_SETTINGS" set shortcuts.bindings.focusLeft cmd+opt+h
"$CMUX_SETTINGS" set shortcuts.bindings.focusDown cmd+opt+j
"$CMUX_SETTINGS" set shortcuts.bindings.focusUp cmd+opt+k
"$CMUX_SETTINGS" set shortcuts.bindings.focusRight cmd+opt+l
"$CMUX_SETTINGS" set shortcuts.bindings.splitRight cmd+opt+v
"$CMUX_SETTINGS" set shortcuts.bindings.splitDown cmd+opt+s
"$CMUX_SETTINGS" set shortcuts.bindings.toggleSplitZoom cmd+opt+z
"$CMUX_SETTINGS" set shortcuts.bindings.equalizeSplits cmd+opt+=

代理分类

适用于生活在通知中并希望在一个键族上处理未读的用户。这将切换未读保留在 cmd+opt+u 上,以便与 Vim 窗格导航结合而不与 cmd+opt+j 冲突。

"$CMUX_SETTINGS" set shortcuts.bindings.showNotifications cmd+u
"$CMUX_SETTINGS" set shortcuts.bindings.jumpToUnread cmd+j
"$CMUX_SETTINGS" set shortcuts.bindings.markOldestUnreadAndJumpNext cmd+shift+j
"$CMUX_SETTINGS" set shortcuts.bindings.toggleUnread cmd+opt+u
"$CMUX_SETTINGS" set shortcuts.bindings.triggerFlash cmd+shift+h
"$CMUX_SETTINGS" set shortcuts.bindings.focusRightSidebar cmd+shift+e

工作区和表面通道

适用于希望工作区和表面位于不同数字和括号通道的用户。

"$CMUX_SETTINGS" set shortcuts.bindings.selectWorkspaceByNumber cmd+1
"$CMUX_SETTINGS" set shortcuts.bindings.selectSurfaceByNumber cmd+opt+1
"$CMUX_SETTINGS" set shortcuts.bindings.nextSidebarTab 'cmd+opt+]'
"$CMUX_SETTINGS" set shortcuts.bindings.prevSidebarTab 'cmd+opt+['
"$CMUX_SETTINGS" set shortcuts.bindings.nextSurface 'cmd+shift+]'
"$CMUX_SETTINGS" set shortcuts.bindings.prevSurface 'cmd+shift+['

浏览器默认值恢复

适用于更改过多并希望嵌入式浏览器行为再次匹配常见 macOS 浏览器快捷键的用户。使用 unset 清除文件覆盖,以便在不存在设置 UI 覆盖时,未来的 cmux 默认值仍然适用。

"$CMUX_SETTINGS" unset shortcuts.bindings.openBrowser
"$CMUX_SETTINGS" unset shortcuts.bindings.focusBrowserAddressBar
"$CMUX_SETTINGS" unset shortcuts.bindings.browserBack
"$CMUX_SETTINGS" unset shortcuts.bindings.browserForward
"$CMUX_SETTINGS" unset shortcuts.bindings.browserReload
"$CMUX_SETTINGS" unset shortcuts.bindings.browserZoomIn
"$CMUX_SETTINGS" unset shortcuts.bindings.browserZoomOut
"$CMUX_SETTINGS" unset shortcuts.bindings.browserZoomReset
"$CMUX_SETTINGS" unset shortcuts.bindings.toggleBrowserDeveloperTools
"$CMUX_SETTINGS" unset shortcuts.bindings.showBrowserJavaScriptConsole
"$CMUX_SETTINGS" unset shortcuts.bindings.find
"$CMUX_SETTINGS" unset shortcuts.bindings.findNext
"$CMUX_SETTINGS" unset shortcuts.bindings.findPrevious

终端优先清理

适用于希望更少应用级快捷键的用户。优先只解除他们命名的操作,但这是一个合理的起始建议。

"$CMUX_SETTINGS" set shortcuts.bindings.renameTab null
"$CMUX_SETTINGS" set shortcuts.bindings.renameWorkspace null
"$CMUX_SETTINGS" set shortcuts.bindings.editWorkspaceDescription null
"$CMUX_SETTINGS" set shortcuts.bindings.triggerFlash null
"$CMUX_SETTINGS" set shortcuts.bindings.sendFeedback null

规则

  • 除非用户明确要求,否则不要编辑 ~/.config/cmux/settings.json。它是遗留的后备配置。

  • 除非用户明确想要完全替换,否则不要覆盖所有 shortcuts.bindings

  • 不要发明操作 ID。根据模式或 shortcut-actions.md 进行验证。

  • 除非用户明确说要应用该命名模板,否则不要在不先显示更改的操作的情况下应用广泛模板。

  • 不要承诺 cmux-settings validate 的冲突检测;它验证 JSON 和支持的键,而不是快捷键语法、macOS 保留或每个焦点上下文冲突。

  • 在将 cmd+[cmd+] 分配给应用范围的操作之前,警告它们与常见的浏览器后退/前进行为冲突,除非浏览器操作也被更改或解除绑定。

  • 优先使用 unset 清除单个操作的文件管理覆盖。除非设置 UI/UserDefaults 值也已重置,否则不要称之为内置默认值重置:

    "$CMUX_SETTINGS" unset shortcuts.bindings.focusLeft
    "$CMUX_SETTINGS" validate