指导并应用 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.ts或Sources/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 值,并与下面的模板匹配。 selectSurfaceByNumber和selectWorkspaceByNumber必须使用 1 到 9 的数字。cmd+1表示完整的cmd+1到cmd+9系列。showHideAllWindows和globalSearch是系统级快捷键。它们不能是和弦,需要修饰键,并且如果被 macOS 保留可能会被拒绝。showHideAllWindows还需要设置 > 全局热键 > 启用系统级热键。绑定可以在cmux.json中验证,而该功能可能被禁用,因此警告用户在报告快捷键可用之前启用该设置。unset删除cmux.json中的覆盖。它不会清除通过设置 UI/UserDefaults 保存的快捷键更改。如果用户要求真正的内置默认值,告诉他们先清除文件管理的覆盖,然后使用设置 > 键盘快捷键 > 重置默认快捷键,之后在应用中验证。对于showHideAllWindows,使用设置 > 全局热键将快捷键恢复为ctrl+opt+cmd+.,因为键盘快捷键 > 重置默认快捷键有意跳过全局热键。- 保存
cmux.json会实时重新加载。不要告诉用户重启 cmux。
工作流程
-
对请求进行分类:
- 一次性重新绑定或解除绑定:将短语映射到操作 ID,应用它,验证,并报告先前的和新绑定。
- 仅审计请求:检查当前绑定,验证,并总结覆盖/未绑定的快捷键,而不写入。
- 重置请求:澄清用户是指文件管理的覆盖还是真正的内置默认值。对于文件管理的重置,对命名操作使用
unset。对于真正的内置默认值,删除文件覆盖并指导用户前往设置 > 键盘快捷键 > 重置默认快捷键;不要报告仅从cmux-settings恢复的内置默认值。如果包含showHideAllWindows,还要指导他们前往设置 > 全局热键恢复ctrl+opt+cmd+.和启用开关。 - 广泛的自定义请求:从“预设模板”中提出 3 到 5 个模板,并让用户选择。
- 命名风格,如 tmux、Vim、iTerm、浏览器或代理分类:选择最接近的模板,显示更改的操作和可能的冲突,并在批量应用前询问,除非用户明确说要应用它。
-
检查现有配置:
"$CMUX_SETTINGS" path "$CMUX_SETTINGS" get shortcuts.bindings 2>/dev/null || printf '{}\n' "$CMUX_SETTINGS" validate -
在应用模板之前,为将要更改的每个操作快照先前的值。不存在的路径必须使用
unset恢复;具有现有自定义值的路径必须使用set <same-json-value>恢复。"$CMUX_SETTINGS" get shortcuts.bindings.focusLeft 2>/dev/null || printf '<absent>\n' -
仅应用所选的操作路径:
"$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 -
验证更改操作的读回:
"$CMUX_SETTINGS" get shortcuts.bindings.newSurface -
以模板名称、更改的操作和来自快照的确切恢复命令结束。仅对模板之前不存在的操作使用
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






