Bỏ qua để đến nội dung

Tuỳ chỉnh phím tắt (Keybindings)

Bài viết được dịch tự động từ bài viết gốc, chưa được kiểm tra lại bởi con người. Chỉ những bài viết có dấu tick xanh cạnh tiêu đề là đã được kiểm tra.

Claude Code hỗ trợ tuỳ chỉnh phím tắt. Chạy /keybindings để tạo hoặc mở file cấu hình tại ~/.claude/keybindings.json.

File cấu hình keybindings là một object với mảng bindings. Mỗi block chỉ định một context và một map từ keystroke sang action.

FieldMô tả
$schemaURL JSON Schema tuỳ chọn, để editor gợi ý autocomplete
$docsURL tài liệu tuỳ chọn
bindingsMảng các block binding theo context

Ví dụ này bind Ctrl+E để mở external editor trong context chat, và unbind Ctrl+U:

{
"$schema": "https://www.schemastore.org/claude-code-keybindings.json",
"$docs": "https://code.claude.com/docs/en/keybindings",
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+e": "chat:externalEditor",
"ctrl+u": null
}
}
]
}

Mỗi block binding chỉ định một context nơi binding đó áp dụng:

ContextMô tả
GlobalÁp dụng ở mọi nơi trong app
ChatKhu vực chat input chính
AutocompleteMenu autocomplete đang mở
SettingsMenu settings
ConfirmationDialog permission và confirmation
TabsComponent điều hướng tab
HelpMenu help đang hiện
TranscriptTranscript viewer
HistorySearchChế độ tìm kiếm lịch sử (Ctrl+R)
TaskBackground task đang chạy
ThemePickerDialog theme picker
AttachmentsĐiều hướng ảnh đính kèm trong dialog chọn
FooterĐiều hướng chỉ báo footer (task, team, diff, artifact)
MessageSelectorChọn tin nhắn trong dialog rewind/summarize
DiffDialogĐiều hướng diff viewer
ModelPickerEffort level trong model picker
SelectComponent select/list dùng chung
PluginDialog plugin (browse, discover, manage)
ScrollCuộn hội thoại và chọn text trong fullscreen mode

Trước v2.1.205, tồn tại một context Doctor và action doctor:fix cho màn hình chẩn đoán /doctor - đã bị gỡ.

Action theo định dạng namespace:action, ví dụ chat:submit để gửi tin nhắn hoặc app:toggleTodos để hiện task list. Mỗi context có tập action riêng.

Action khả dụng trong context Global:

ActionMặc địnhMô tả
app:interruptCtrl+CHuỷ thao tác hiện tại
app:exitCtrl+DThoát Claude Code. Nhấn hai lần trong 800ms để xác nhận
app:redraw(chưa bind)Buộc redraw terminal
app:toggleTodosCtrl+TBật/tắt checklist to-do của Claude. Không phải view /tasks cho background task
app:toggleTranscriptCtrl+OBật/tắt transcript verbose

Action để điều hướng lịch sử lệnh:

ActionMặc địnhMô tả
history:searchCtrl+RMở tìm kiếm lịch sử
history:previousUpMục lịch sử trước
history:nextDownMục lịch sử sau

Action khả dụng trong context Chat:

ActionMặc địnhMô tả
chat:cancelEscapeHuỷ input hiện tại
chat:clearInputCtrl+LBuộc redraw toàn màn hình, giữ nguyên input. Ở fullscreen rendering, nhấn hai lần trong hai giây để chạy /clear
chat:clearScreenCmd+Kfullscreen rendering, nhấn hai lần trong hai giây để chạy /clear
chat:killAgentsCtrl+X Ctrl+KDừng mọi subagent background đang chạy trong phiên này
chat:cycleModeShift+Tab*Cycle qua các permission mode
chat:modelPickerMeta+PMở model picker
chat:fastModeMeta+OBật/tắt fast mode
chat:thinkingToggleMeta+TBật/tắt extended thinking
chat:submitEnterGửi tin nhắn
chat:newlineCtrl+JChèn dòng mới mà không submit
chat:undoCtrl+_, Ctrl+Shift+-Undo hành động gần nhất
chat:externalEditorCtrl+G, Ctrl+X Ctrl+EMở bằng external editor
chat:stashCtrl+SStash prompt hiện tại
chat:imagePasteCtrl+V (Alt+V trên Windows/WSL)Paste ảnh từ clipboard. Trên WSL, cả hai shortcut đều được bind mặc định

*Trên Windows không có VT mode (Node <24.2.0/<22.17.0, Bun <1.2.23), mặc định là Meta+M.

Action khả dụng trong context Autocomplete:

ActionMặc địnhMô tả
autocomplete:acceptTabChấp nhận gợi ý
autocomplete:dismissEscapeĐóng menu
autocomplete:previousUpGợi ý trước
autocomplete:nextDownGợi ý sau

Action khả dụng trong context Confirmation:

ActionMặc địnhMô tả
confirm:yesY, EnterXác nhận hành động
confirm:noN, EscapeTừ chối hành động
confirm:previousUpTuỳ chọn trước
confirm:nextDownTuỳ chọn sau
confirm:nextFieldTabField kế tiếp
confirm:previousField(chưa bind)Field trước
confirm:toggleSpaceBật/tắt lựa chọn
confirm:cycleModeShift+TabCycle permission mode
confirm:toggleExplanationCtrl+EBật/tắt giải thích do model sinh cho lệnh trên permission prompt của Bash/PowerShell

Action khả dụng trong context Confirmation cho dialog permission:

ActionMặc địnhMô tả
permission:toggleDebug(chưa bind)Bật/tắt thông tin debug permission. Mặc định trước đây là Ctrl+D, bị gỡ ở v2.1.146 vì trùng với app:exit

Action khả dụng trong context Transcript:

ActionMặc địnhMô tả
transcript:toggleShowAllCtrl+EBật/tắt hiện toàn bộ nội dung
transcript:exitq, Ctrl+C, EscapeThoát transcript view

transcript:toggleShowAll chỉ áp dụng ở renderer mặc định; trong fullscreen rendering, transcript viewer không có toggle show-all.

Action khả dụng trong context HistorySearch:

ActionMặc địnhMô tả
historySearch:nextCtrl+RKết quả khớp tiếp theo
historySearch:acceptEscape, TabChấp nhận lựa chọn
historySearch:cancelCtrl+CHuỷ tìm kiếm
historySearch:executeEnterChạy lệnh đã chọn
historySearch:cycleScopeCtrl+SCycle phạm vi: session, project, everywhere

Mặc định của historySearch:next, historySearch:accept, historySearch:cancel, historySearch:execute áp dụng cho tìm kiếm lịch sử inline ở renderer mặc định, vốn luôn tìm prompt từ mọi project. historySearch:cycleScope chỉ có tác dụng ở fullscreen rendering, nơi Ctrl+R mở một dialog tìm kiếm riêng và Ctrl+S cycle phạm vi của nó. Các phím khác trong dialog này cố định, không rebind được: Enter/Tab đặt kết quả đang chọn vào ô input, Esc huỷ.

Action khả dụng trong context Task:

ActionMặc địnhMô tả
task:backgroundCtrl+B, Ctrl+X Ctrl+BĐưa task hiện tại chạy background. Chord Ctrl+X Ctrl+B yêu cầu v2.1.169 trở lên, dùng để tránh xung đột prefix của tmux

Action khả dụng trong context ThemePicker:

ActionMặc địnhMô tả
theme:toggleSyntaxHighlightingCtrl+TBật/tắt syntax highlighting

Action khả dụng trong context Help:

ActionMặc địnhMô tả
help:dismissEscapeĐóng menu help

Action khả dụng trong context Tabs:

ActionMặc địnhMô tả
tabs:nextTab, RightTab tiếp theo
tabs:previousShift+Tab, LeftTab trước

Action khả dụng trong context Attachments:

ActionMặc địnhMô tả
attachments:nextRightẢnh đính kèm tiếp theo
attachments:previousLeftẢnh đính kèm trước
attachments:removeBackspace, DeleteXoá ảnh đính kèm đang chọn
attachments:exitDown, EscapeThoát điều hướng ảnh đính kèm

Action khả dụng trong context Footer:

ActionMặc địnhMô tả
footer:nextRightMục footer tiếp theo
footer:previousLeftMục footer trước
footer:upUpDi chuyển lên trong footer (bỏ chọn khi ở trên cùng)
footer:downDownDi chuyển xuống trong footer
footer:openSelectedEnterMở mục footer đang chọn
footer:clearSelectionEscapeBỏ chọn footer
footer:dismissBackspace, DeleteBỏ link artifact đang chọn khỏi footer; artifact đã publish không bị ảnh hưởng. Ở các hàng footer khác, phím này không có tác dụng. Yêu cầu v2.1.217 trở lên

Action khả dụng trong context MessageSelector:

ActionMặc địnhMô tả
messageSelector:upUp, K, Ctrl+PDi chuyển lên trong danh sách
messageSelector:downDown, J, Ctrl+NDi chuyển xuống trong danh sách
messageSelector:topCtrl+Up, Shift+Up, Meta+Up, Shift+KNhảy lên đầu
messageSelector:bottomCtrl+Down, Shift+Down, Meta+Down, Shift+JNhảy xuống cuối
messageSelector:selectEnterChọn tin nhắn

Action khả dụng trong context DiffDialog:

ActionMặc địnhMô tả
diff:dismissEscapeĐóng diff viewer; từ detail view, quay lại danh sách file thay vì đóng hẳn
diff:previousSourceLeftNguồn diff trước
diff:nextSourceRightNguồn diff sau
diff:previousFileUp, KFile trước trong danh sách; cuộn lên một dòng trong detail view
diff:nextFileDown, JFile sau trong danh sách; cuộn xuống một dòng trong detail view
diff:viewDetailsEnterXem chi tiết diff
diff:back(chưa bind)Quay lại trong diff viewer. Escape thực hiện việc này qua diff:dismiss. Mặc định trước đây là Left ở detail view, đã bị gỡ ở v2.1.203

Detail view của diff cũng bind các phím kiểu pager theo scroll actions chuẩn. Các binding này thuộc context DiffDialog, chỉ áp dụng ở detail view; mặc định của context Scroll liệt kê ở Scroll actions không đổi.

ActionMặc địnhMô tả
scroll:pageUpPageUpCuộn lên nửa viewport
scroll:pageDownPageDownCuộn xuống nửa viewport
scroll:fullPageUpShift+Space, BCuộn lên một viewport đầy
scroll:fullPageDownSpaceCuộn xuống một viewport đầy
scroll:topG, HomeNhảy lên đầu
scroll:bottomShift+G, EndNhảy xuống cuối

Action khả dụng trong context ModelPicker:

ActionMặc địnhMô tả
modelPicker:decreaseEffortLeftGiảm effort level
modelPicker:increaseEffortRightTăng effort level
modelPicker:thisSessionOnlysÁp dụng model đang chọn chỉ cho phiên này

Action khả dụng trong context Select:

ActionMặc địnhMô tả
select:nextDown, J, Ctrl+NTuỳ chọn tiếp theo
select:previousUp, K, Ctrl+PTuỳ chọn trước
select:acceptEnterChấp nhận lựa chọn
select:cancelEscapeHuỷ lựa chọn

Action khả dụng trong context Plugin:

ActionMặc địnhMô tả
plugin:toggleSpaceBật/tắt chọn plugin
plugin:installICài các plugin đang chọn
plugin:favoriteFĐánh dấu yêu thích plugin đang chọn để nó sắp gần đầu tab Installed

Action khả dụng trong context Settings. select:acceptconfirm:no tái sử dụng từ context SelectConfirmation với hành vi riêng cho Settings: thay đổi áp dụng ngay khi bạn đổi một setting, nên Escape đóng panel với thay đổi đã lưu chứ không phải từ chối.

ActionMặc địnhMô tả
settings:search/Vào chế độ tìm kiếm
settings:retryRThử tải lại dữ liệu usage khi lỗi
select:acceptEnter, SpaceĐổi setting đang chọn hoặc mở submenu
confirm:noEscapeĐóng panel - thay đổi đã được lưu sẵn

Action khả dụng trong context Chat khi voice dictation đang bật:

ActionMặc địnhMô tả
voice:pushToTalkSpaceĐọc chính tả một prompt. Giữ hoặc tap tuỳ mode của /voice

Action khả dụng trong context Scroll khi fullscreen rendering đang bật:

ActionMặc địnhMô tả
scroll:lineUp(chưa bind)Cuộn lên một dòng. Cuộn chuột kích hoạt action này
scroll:lineDown(chưa bind)Cuộn xuống một dòng. Cuộn chuột kích hoạt action này
scroll:pageUpPageUpCuộn lên nửa chiều cao viewport
scroll:pageDownPageDownCuộn xuống nửa chiều cao viewport
scroll:topCtrl+HomeNhảy tới đầu hội thoại
scroll:bottomCtrl+EndNhảy tới tin nhắn mới nhất và bật lại auto-follow
scroll:halfPageUp(chưa bind)Cuộn lên nửa chiều cao viewport. Giống scroll:pageUp, có sẵn để rebind kiểu vi
scroll:halfPageDown(chưa bind)Cuộn xuống nửa chiều cao viewport. Giống scroll:pageDown, có sẵn để rebind kiểu vi
scroll:fullPageUp(chưa bind)Cuộn lên một viewport đầy
scroll:fullPageDown(chưa bind)Cuộn xuống một viewport đầy
selection:copyCtrl+Shift+C / Cmd+CCopy text đang chọn vào clipboard
selection:clear(chưa bind)Bỏ chọn text hiện tại
selection:extendLeftShift+LeftMở rộng vùng chọn sang trái một cột
selection:extendRightShift+RightMở rộng vùng chọn sang phải một cột
selection:extendUpShift+UpMở rộng vùng chọn lên một hàng. Cuộn viewport khi vùng chọn chạm mép trên
selection:extendDownShift+DownMở rộng vùng chọn xuống một hàng. Cuộn viewport khi vùng chọn chạm mép dưới
selection:extendLineStartShift+HomeMở rộng vùng chọn tới đầu dòng
selection:extendLineEndShift+EndMở rộng vùng chọn tới cuối dòng

Dùng phím modifier với dấu +:

  • ctrl hoặc control - phím Control
  • shift - phím Shift
  • alt, opt, option, hoặc meta - phím Alt trên Windows/Linux, phím Option trên macOS
  • cmd, command, super, hoặc win - phím Command trên macOS, phím Windows trên Windows, phím Super trên Linux

Nhóm cmd chỉ được phát hiện ở terminal báo cáo modifier Super, ví dụ terminal hỗ trợ Kitty keyboard protocol hoặc chế độ modifyOtherKeys của xterm. Hầu hết terminal không gửi nó, nên dùng ctrl hoặc meta cho binding bạn muốn hoạt động ở mọi nơi.

Ví dụ:

ctrl+k Ctrl + K
shift+tab Shift + Tab
meta+p Option + P trên macOS, Alt + P nơi khác
ctrl+shift+c Nhiều modifier

Một chữ cái viết hoa đơn lẻ ngầm định kèm Shift. Ví dụ K tương đương shift+k. Hữu ích cho binding kiểu vim, nơi chữ hoa/thường có ý nghĩa khác nhau.

Chữ hoa kèm modifier (ví dụ ctrl+K) chỉ mang tính stylistic, không ngầm định Shift: ctrl+K giống hệt ctrl+k.

Chord là chuỗi keystroke cách nhau bằng dấu cách:

ctrl+k ctrl+s Nhấn Ctrl+K, nhả ra, rồi Ctrl+S
  • escape hoặc esc - phím Escape
  • enter hoặc return - phím Enter
  • tab - phím Tab
  • space - phím Space
  • up, down, left, right - phím mũi tên
  • backspace, delete - phím xoá

Đặt một action thành null để unbind shortcut mặc định:

{
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+s": null
}
}
]
}

Cách này cũng dùng được cho chord binding. Unbind hết các chord chung một prefix sẽ giải phóng prefix đó để dùng làm single-key binding. Một chord ở bất kỳ context nào đang active vẫn giữ prefix của nó, nên bạn phải unbind từng chord ở đúng context đã định nghĩa nó.

Nhóm Ctrl+X mặc định trải trên hai context: ctrl+x ctrl+kctrl+x ctrl+eChat, và ctrl+x ctrl+bTask. Để giành lại ctrl+x làm single-key binding, unbind tất cả:

{
"bindings": [
{
"context": "Task",
"bindings": {
"ctrl+x ctrl+b": null
}
},
{
"context": "Chat",
"bindings": {
"ctrl+x ctrl+k": null,
"ctrl+x ctrl+e": null,
"ctrl+x": "chat:newline"
}
}
]
}

Nếu bạn chỉ unbind một phần chord trên một prefix, nhấn prefix vẫn vào chế độ chờ chord cho các binding còn lại.

Các shortcut sau không thể rebind:

ShortcutLý do
Ctrl+CInterrupt/cancel hardcoded
Ctrl+DExit hardcoded
Ctrl+MGiống hệt Enter trong terminal (cả hai đều gửi CR)
Caps LockKhông được gửi tới ứng dụng terminal

Một số shortcut có thể xung đột với terminal multiplexer:

ShortcutXung đột
Ctrl+BPrefix của tmux (nhấn hai lần để gửi)
Ctrl+APrefix của GNU screen
Ctrl+ZTạm dừng process Unix (SIGTSTP)

Khi vim mode được bật qua /config → Editor mode, keybinding và vim mode hoạt động độc lập:

  • Vim mode xử lý input ở cấp text input (di chuyển con trỏ, mode, motion)
  • Keybinding xử lý action ở cấp component (toggle todos, submit…)
  • Phím Escape trong vim mode chuyển INSERT sang NORMAL mode; nó không kích hoạt chat:cancel
  • Hầu hết shortcut Ctrl+phím đi xuyên qua vim mode tới hệ thống keybinding
  • Phím vim không remap được qua file keybindings. Để map một chuỗi hai phím ở INSERT mode như jj thành Escape, dùng setting vimInsertModeRemaps
  • Ở vim NORMAL mode, ? hiện help menu (hành vi vim)
  • Ở vim NORMAL mode, / mở tìm kiếm lịch sử, giống Ctrl+R ở chế độ thường

Claude Code validate file keybindings của bạn và cảnh báo với:

  • Lỗi parse (JSON hoặc cấu trúc không hợp lệ)
  • Tên context không hợp lệ
  • Xung đột với shortcut reserved
  • Xung đột với terminal multiplexer
  • Binding trùng lặp trong cùng một context

Claude Code báo cảnh báo khi file load và ghi từng cảnh báo vào debug log. Chạy Claude Code với --debug để xem chi tiết.