引導並套用 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"]。第一個按鍵需要修飾鍵,除非按鍵是 Space。第二個按鍵可以是裸鍵。 - 解除綁定:明確解除綁定建議使用
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 內建預設值,因此使用 unset 清除檔案覆寫,而不是寫入預設值。
"$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






