Горячие клавиши
Настройте свои горячие клавиши.
OpenCode имеет список горячих клавиш, которые вы можете настроить через tui.json.
{
"$schema": "https://opencode.ai/tui.json",
"leader_timeout": 2000,
"keybinds": {
"leader": "ctrl+x",
"app_exit": "ctrl+c,ctrl+d,<leader>q",
"app_debug": "none",
"app_console": "none",
"app_heap_snapshot": "none",
"app_toggle_animations": "none",
"app_toggle_file_context": "none",
"app_toggle_diffwrap": "none",
"app_toggle_paste_summary": "none",
"app_toggle_session_directory_filter": "none",
"command_list": "ctrl+p",
"help_show": "none",
"docs_open": "none",
"editor_open": "<leader>e",
"theme_list": "<leader>t",
"theme_switch_mode": "none",
"theme_mode_lock": "none",
"sidebar_toggle": "<leader>b",
"scrollbar_toggle": "none",
"status_view": "<leader>s",
"session_export": "<leader>x",
"session_copy": "none",
"session_new": "<leader>n",
"session_list": "<leader>l",
"session_timeline": "<leader>g",
"session_fork": "none",
"session_rename": "ctrl+r",
"session_delete": "ctrl+d",
"session_share": "none",
"session_unshare": "none",
"session_interrupt": "escape",
"session_compact": "<leader>c",
"session_toggle_timestamps": "none",
"session_toggle_generic_tool_output": "none",
"session_child_first": "<leader>down",
"session_child_cycle": "right",
"session_child_cycle_reverse": "left",
"session_parent": "up",
"stash_delete": "ctrl+d",
"model_provider_list": "ctrl+a",
"model_favorite_toggle": "ctrl+f",
"model_list": "<leader>m",
"model_cycle_recent": "f2",
"model_cycle_recent_reverse": "shift+f2",
"model_cycle_favorite": "none",
"model_cycle_favorite_reverse": "none",
"mcp_list": "none",
"provider_connect": "none",
"console_org_switch": "none",
"agent_list": "<leader>a",
"agent_cycle": "tab",
"agent_cycle_reverse": "shift+tab",
"variant_cycle": "ctrl+t",
"variant_list": "none",
"messages_page_up": "pageup,ctrl+alt+b",
"messages_page_down": "pagedown,ctrl+alt+f",
"messages_line_up": "ctrl+alt+y",
"messages_line_down": "ctrl+alt+e",
"messages_half_page_up": "ctrl+alt+u",
"messages_half_page_down": "ctrl+alt+d",
"messages_first": "ctrl+g,home",
"messages_last": "ctrl+alt+g,end",
"messages_next": "none",
"messages_previous": "none",
"messages_last_user": "none",
"messages_copy": "<leader>y",
"messages_undo": "<leader>u",
"messages_redo": "<leader>r",
"messages_toggle_conceal": "<leader>h",
"tool_details": "none",
"display_thinking": "none",
"prompt_submit": "none",
"prompt_editor_context_clear": "none",
"prompt_skills": "none",
"prompt_stash": "none",
"prompt_stash_pop": "none",
"prompt_stash_list": "none",
"workspace_set": "none",
"input_clear": "ctrl+c",
"input_paste": {
"key": "ctrl+v",
"preventDefault": false
},
"input_submit": "return",
"input_newline": "shift+return,ctrl+return,alt+return,ctrl+j",
"input_move_left": "left,ctrl+b",
"input_move_right": "right,ctrl+f",
"input_move_up": "up",
"input_move_down": "down",
"input_select_left": "shift+left",
"input_select_right": "shift+right",
"input_select_up": "shift+up",
"input_select_down": "shift+down",
"input_line_home": "ctrl+a",
"input_line_end": "ctrl+e",
"input_select_line_home": "ctrl+shift+a",
"input_select_line_end": "ctrl+shift+e",
"input_visual_line_home": "alt+a",
"input_visual_line_end": "alt+e",
"input_select_visual_line_home": "alt+shift+a",
"input_select_visual_line_end": "alt+shift+e",
"input_buffer_home": "home",
"input_buffer_end": "end",
"input_select_buffer_home": "shift+home",
"input_select_buffer_end": "shift+end",
"input_delete_line": "ctrl+shift+d",
"input_delete_to_line_end": "ctrl+k",
"input_delete_to_line_start": "ctrl+u",
"input_backspace": "backspace,shift+backspace",
"input_delete": "ctrl+d,delete,shift+delete",
"input_undo": "ctrl+-,super+z",
"input_redo": "ctrl+.,super+shift+z",
"input_word_forward": "alt+f,alt+right,ctrl+right",
"input_word_backward": "alt+b,alt+left,ctrl+left",
"input_select_word_forward": "alt+shift+f,alt+shift+right",
"input_select_word_backward": "alt+shift+b,alt+shift+left",
"input_delete_word_forward": "alt+d,alt+delete,ctrl+delete",
"input_delete_word_backward": "ctrl+w,ctrl+backspace,alt+backspace",
"input_select_all": "super+a",
"history_previous": "up",
"history_next": "down",
"dialog.select.prev": "up,ctrl+p",
"dialog.select.next": "down,ctrl+n",
"dialog.select.page_up": "pageup",
"dialog.select.page_down": "pagedown",
"dialog.select.home": "home",
"dialog.select.end": "end",
"dialog.select.submit": "return",
"dialog.prompt.submit": "return",
"dialog.mcp.toggle": "space",
"prompt.autocomplete.prev": "up,ctrl+p",
"prompt.autocomplete.next": "down,ctrl+n",
"prompt.autocomplete.hide": "escape",
"prompt.autocomplete.select": "return",
"prompt.autocomplete.complete": "tab",
"permission.prompt.fullscreen": "ctrl+f",
"plugins.toggle": "space",
"dialog.plugins.install": "shift+i",
"terminal_suspend": "ctrl+z",
"terminal_title_toggle": "none",
"tips_toggle": "<leader>h",
"plugin_manager": "none",
"plugin_install": "none",
"which_key_toggle": "ctrl+alt+k",
"which_key_layout_toggle": "ctrl+alt+shift+k",
"which_key_pending_toggle": "ctrl+alt+shift+p",
"which_key_group_previous": "ctrl+alt+left,ctrl+alt+[",
"which_key_group_next": "ctrl+alt+right,ctrl+alt+]",
"which_key_scroll_up": "ctrl+alt+up,ctrl+alt+p",
"which_key_scroll_down": "ctrl+alt+down,ctrl+alt+n",
"which_key_page_up": "ctrl+alt+pageup",
"which_key_page_down": "ctrl+alt+pagedown",
"which_key_home": "ctrl+alt+home",
"which_key_end": "ctrl+alt+end"
}
}Примечание: В Windows значения по умолчанию для
input_undoиterminal_suspendотличаются:
input_undoпо умолчанию равенctrl+z,ctrl+-,super+z, когда не настроен явно. Привязкаctrl+zдобавляется потому, что терминалы Windows не поддерживают приостановку POSIX.terminal_suspendпринудительно установлен вnone, потому что нативные терминалы Windows не поддерживают приостановку POSIX.
Клавиша Leader
OpenCode использует клавишу leader для многих горячих клавиш. Это позволяет избежать конфликтов в вашем терминале.
По умолчанию клавишей leader является ctrl+x, и многие действия требуют сначала нажать клавишу leader, а затем сочетание. Например, чтобы начать новую сессию, вы сначала нажимаете ctrl+x, а затем нажимаете n.
Вам не обязательно использовать клавишу leader для ваших горячих клавиш, но мы рекомендуем это делать.
Некоторые навигационные горячие клавиши намеренно не используют клавишу leader по умолчанию. Для сессий субагентов значения по умолчанию: session_child_first = <leader>down, session_child_cycle = right, session_child_cycle_reverse = left и session_parent = up.
leader_timeout управляет тем, как долго OpenCode ждёт следующую клавишу после клавиши leader. По умолчанию 2000 миллисекунд.
Значения привязок
Строка может содержать одно сочетание или несколько сочетаний, разделённых запятыми. Вы также можете использовать массив для нескольких сочетаний.
Для расширенных случаев используйте объект с key, event, preventDefault или fallthrough.
{
"$schema": "https://opencode.ai/tui.json",
"keybinds": {
"messages_copy": ["<leader>y", "ctrl+shift+c"],
"input_paste": {
"key": "ctrl+v",
"preventDefault": false
}
}
}Отключение горячей клавиши
Вы можете отключить горячую клавишу, добавив ключ в tui.json со значением "none" или false.
{
"$schema": "https://opencode.ai/tui.json",
"keybinds": {
"session_compact": "none"
}
}Сочетания клавиш в десктопном приложении
Поле ввода промпта в десктопном приложении OpenCode поддерживает распространённые сочетания в стиле Readline/Emacs для редактирования текста. Они встроены и в настоящее время не настраиваются через opencode.json.
| Сочетание | Действие |
|---|---|
ctrl+a | Перейти в начало текущей строки |
ctrl+e | Перейти в конец текущей строки |
ctrl+b | Переместить курсор на один символ назад |
ctrl+f | Переместить курсор на один символ вперёд |
alt+b | Переместить курсор на одно слово назад |
alt+f | Переместить курсор на одно слово вперёд |
ctrl+d | Удалить символ под курсором |
ctrl+k | Удалить до конца строки |
ctrl+u | Удалить до начала строки |
ctrl+w | Удалить предыдущее слово |
alt+d | Удалить следующее слово |
ctrl+t | Поменять символы местами |
ctrl+g | Отменить всплывающие окна / прервать выполняющийся ответ |
Shift+Enter
Некоторые терминалы по умолчанию не отправляют клавиши-модификаторы с Enter. Вам может потребоваться настроить ваш терминал на отправку Shift+Enter как escape-последовательности.
Windows Terminal
Откройте ваш settings.json по адресу:
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.jsonДобавьте это в корневой массив actions:
"actions": [
{
"command": {
"action": "sendInput",
"input": "\u001b[13;2u"
},
"id": "User.sendInput.ShiftEnterCustom"
}
]Добавьте это в корневой массив keybindings:
"keybindings": [
{
"keys": "shift+enter",
"id": "User.sendInput.ShiftEnterCustom"
}
]Сохраните файл и перезапустите Windows Terminal или откройте новую вкладку.