Настройка горячих клавиш OpenCode: объяснение
OpenCode предоставляет полную систему сочетаний клавиш, охватывающую различные операции, такие как управление приложением, управление сессиями, просмотр сообщений, переключение моделей и редактирование ввода.
Все сочетания клавиш можно настроить черезtui.jsonфайл.
Файл конфигурации
Конфигурации сочетаний клавиш записываются вtui.jsonполеkeybindsфайла. Имя ключа каждой записи — это имя операции, а значение — соответствующее сочетание клавиш:
Пример
"$schema": "https://opencode.ai/tui.json",
"keybinds": {
"leader": "ctrl+x", // Настройка ведущей клавиши (см. объяснение ниже)
"session_new": "<leader>n", // Новая сессия: нажмите ведущую клавишу, затем нажмите n
"model_list": "<leader>m", // Открыть список моделей: нажмите ведущую клавишу, затем нажмите m
"session_compact": "none" // Установите значение "none", чтобы отключить это сочетание клавиш
}
}
Операцию можно привязать к нескольким сочетаниям клавиш, разделённым запятыми. Срабатывание любого из них выполнит операцию:
Пример
"$schema": "https://opencode.ai/tui.json",
"keybinds": {
// Следующая запись означает: нажатие pageup или ctrl+alt+b прокрутит вверх на одну страницу
"messages_page_up": "pageup,ctrl+alt+b"
}
}
Клавиша-лидер
Большинство сочетаний клавиш OpenCode используют механизм склавишей-лидером: сначала нажмите клавишу-лидер, затем функциональную клавишу, и комбинация этих двух клавиш запускает соответствующую операцию. Преимущество такого подхода — избегать конфликтов с собственными сочетаниями клавиш терминала.
Клавиша-лидер по умолчанию —ctrl+x. Например, сочетание клавиш для создания новой сессии —<leader>n, а фактическое действие: сначала нажмитеctrl+x, затем нажмитеn。
Вы можете изменить клавишу-лидер на любую комбинацию клавиш:
Пример
"$schema": "https://opencode.ai/tui.json",
"keybinds": {
"leader": "ctrl+x" // Измените клавишу-лидер на другую клавишу, например "ctrl+space", "alt+x" и т. д.
// Заполнитель <leader> в конфигурации будет автоматически заменён на клавишу, заданную здесь
}
}
Вам не обязательно использовать механизм клавиши-лидера для настройки сочетаний клавиш — можно также напрямую привязывать обычные клавиши или комбинации клавиш. Однако рекомендуется отдавать предпочтение клавише-лидеру, чтобы избежать конфликтов с сочетаниями клавиш терминала.
Отключение сочетаний клавиш
Установите значение любого сочетания клавиш равным"none"чтобы отключить эту операцию. После отключения нажатие любой клавиши не будет её вызывать:
Пример
"$schema": "https://opencode.ai/tui.json",
"keybinds": {
"session_compact": "none", // Отключить сочетание клавиш "compact session"
"scrollbar_toggle": "none", // Отключить сочетание клавиш "toggle scrollbar"
"tips_toggle": "none" // Отключить сочетание клавиш "toggle tips"
}
}
Полный список сочетаний клавиш
1. Приложение и интерфейс
| Название операции | Сочетание клавиш по умолчанию | Описание |
|---|---|---|
app_exit |
ctrl+c, ctrl+d, <leader>q |
Выйти из OpenCode |
editor_open |
<leader>e |
Открыть текущее содержимое ввода во внешнем редакторе |
theme_list |
<leader>t |
Открыть список тем и переключить тему интерфейса |
sidebar_toggle |
<leader>b |
Показать или скрыть боковую панель |
scrollbar_toggle |
Нет (отключено по умолчанию) | Показать или скрыть полосу прокрутки |
username_toggle |
Нет (отключено по умолчанию) | Показать или скрыть имя пользователя |
status_view |
<leader>s |
Просмотреть информацию о текущем состоянии |
tool_details |
Нет (отключено по умолчанию) | Просмотреть сведения о вызове инструмента |
command_list |
ctrl+p |
Открыть палитру команд и искать среди всех доступных команд |
tips_toggle |
<leader>h |
Показать или скрыть советы по использованию |
display_thinking |
Нет (отключено по умолчанию) | Показать или скрыть процесс размышления модели |
terminal_suspend |
ctrl+z |
Приостановить терминал (перевести OpenCode в фоновый режим и вернуться в оболочку; введитеfgчтобы возобновить) |
terminal_title_toggle |
Нет (отключено по умолчанию) | Показать или скрыть строку заголовка терминала |
2. Управление сессиями
| Название операции | Сочетание клавиш по умолчанию | Описание |
|---|---|---|
session_new |
<leader>n |
Создать новую сессию |
session_list |
<leader>l |
Просмотреть все списки исторических сессий |
session_export |
<leader>x |
Экспортировать содержимое текущей сессии |
session_timeline |
<leader>g |
Просмотреть временную шкалу текущей сессии |
session_fork |
Нет (отключено по умолчанию) | Создать сессию-ветку от текущей позиции |
session_rename |
Нет (отключено по умолчанию) | Переименовать текущий сеанс |
session_share |
Нет (отключено по умолчанию) | Поделиться текущей сессией |
session_unshare |
Нет (отключено по умолчанию) | Отменить общий доступ к текущей сессии |
session_interrupt |
escape |
Прервать текущий выполняющийся ответ |
session_compact |
<leader>c |
Сжать контекст текущей сессии, чтобы уменьшить использование токенов |
session_child_first |
<leader>↓ |
Перейти к первой дочерней сессии |
session_child_cycle |
<leader>→ |
Переключение вперёд по дочерним сессиям |
session_child_cycle_reverse |
<leader>← |
Переключение назад по дочерним сессиям |
session_parent |
<leader>↑ |
Возврат к родительской сессии |
3. Навигация по сообщениям
| Название операции | Сочетание клавиш по умолчанию | Описание |
|---|---|---|
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 |
Нет (отключено по умолчанию) | Перейти к следующему сообщению |
messages_previous |
Нет (отключено по умолчанию) | Перейти к предыдущему сообщению |
messages_last_user |
Нет (отключено по умолчанию) | Перейти к последнему сообщению пользователя |
messages_copy |
<leader>y |
Скопировать содержимое текущего сообщения в буфер обмена |
messages_undo |
<leader>u |
Отменить последнюю операцию |
messages_redo |
<leader>r |
Повторить отменённую операцию |
messages_toggle_conceal |
<leader>h |
Свернуть или развернуть скрытое содержимое в сообщениях |
4. Модели & агенты
| Название операции | Сочетание клавиш по умолчанию | Описание |
|---|---|---|
model_list |
<leader>m |
Открыть список моделей, чтобы выбрать и переключить текущую используемую модель |
model_cycle_recent |
f2 |
Циклически переключаться вперёд по недавно использованным моделям |
model_cycle_recent_reverse |
shift+f2 |
Циклически переключаться назад по недавно использованным моделям |
model_cycle_favorite |
Нет (отключено по умолчанию) | Циклически переключаться вперёд по избранным моделям |
model_cycle_favorite_reverse |
Нет (отключено по умолчанию) | Циклически переключаться назад по избранным моделям |
variant_cycle |
ctrl+t |
Циклически переключаться между вариантами текущей модели (например, режим размышления) |
agent_list |
<leader>a |
Открыть список агентов для выбора и переключения текущего используемого агента |
agent_cycle |
tab |
Циклически переключаться вперёд по агентам |
agent_cycle_reverse |
shift+tab |
Циклически переключаться назад по агентам |
5. Редактирование поля ввода
| Название операции | Сочетание клавиш по умолчанию | Описание |
|---|---|---|
input_submit |
return |
Отправить текущее содержимое поля ввода |
input_newline |
shift+return, ctrl+return, alt+return, ctrl+j |
Вставить перенос строки в поле ввода (без отправки) |
input_clear |
ctrl+c |
Очистить содержимое поля ввода |
input_paste |
ctrl+v |
Вставить содержимое буфера обмена в поле ввода |
input_move_left |
left, ctrl+b |
Переместить курсор влево на один символ |
input_move_right |
right, ctrl+f |
Переместить курсор вправо на один символ |
input_move_up |
up |
Переместить курсор на одну строку вверх |
input_move_down |
down |
Переместить курсор на одну строку вниз |
input_word_forward |
alt+f, alt+right, ctrl+right |
Переместить курсор вперёд на одно слово |
input_word_backward |
alt+b, alt+left, ctrl+left |
Переместить курсор назад на одно слово |
input_line_home |
ctrl+a |
Перейти в начало текущей строки |
input_line_end |
ctrl+e |
Перейти в конец текущей строки |
input_visual_line_home |
alt+a |
Перейти в начало текущей визуальной строки (строки, отображаемой после переноса) |
input_visual_line_end |
alt+e |
Перейти в конец текущей визуальной строки |
input_buffer_home |
home |
Перейти в самое начало содержимого всего поля ввода |
input_buffer_end |
end |
Перейти в самый конец содержимого всего поля ввода |
input_delete_to_line_end |
ctrl+k |
Удалить всё содержимое от курсора до конца текущей строки |
input_delete_to_line_start |
ctrl+u |
Удалить всё содержимое от начала текущей строки до курсора |
input_delete_line |
ctrl+shift+d |
Удалить всю строку, в которой находится курсор |
input_backspace |
backspace, shift+backspace |
Удалить символ перед курсором |
input_delete |
ctrl+d, delete, shift+delete |
Удалить символ после курсора |
input_delete_word_forward |
alt+d, alt+delete, ctrl+delete |
Удалить слово после курсора |
input_delete_word_backward |
ctrl+w, ctrl+backspace, alt+backspace |
Удалить слово перед курсором |
input_undo |
ctrl+-, super+z |
Отменить последнее изменение в поле ввода |
input_redo |
ctrl+., super+shift+z |
Повторить отменённое изменение |
6. Выделение текста
| Название операции | Сочетание клавиш по умолчанию | Описание |
|---|---|---|
input_select_left |
shift+left |
Выделить один символ слева |
input_select_right |
shift+right |
Выделить один символ справа |
input_select_up |
shift+up |
Выделить одну строку вверх |
input_select_down |
shift+down |
Выделить одну строку вниз |
input_select_word_forward |
alt+shift+f, alt+shift+right |
Выделить одно слово вперёд |
input_select_word_backward |
alt+shift+b, alt+shift+left |
Выделить одно слово назад |
input_select_line_home |
ctrl+shift+a |
Выделить от позиции курсора до начала текущей строки |
input_select_line_end |
ctrl+shift+e |
Выделить от позиции курсора до конца текущей строки |
input_select_visual_line_home |
alt+shift+a |
Выделить от позиции курсора до начала текущей визуальной строки |
input_select_visual_line_end |
alt+shift+e |
Выделить от позиции курсора до конца текущей визуальной строки |
input_select_buffer_home |
shift+home |
Выделить от позиции курсора до самого начала поля ввода |
input_select_buffer_end |
shift+end |
Выделить от позиции курсора до самого конца поля ввода |
7. История ввода
| Название операции | Сочетание клавиш по умолчанию | Описание |
|---|---|---|
history_previous |
up |
Получить предыдущий ввод из истории (работает, когда поле ввода пусто) |
history_next |
down |
Получить следующий ввод из истории |
Встроенные сочетания клавиш ввода в настольной версии
Поле ввода запроса в настольной версии OpenCode дополнительно имеет встроенный наборReadline / Emacs styleсочетаний клавиш редактирования текста,Эти сочетания клавиш являются встроенными функциями и не могут бытьtui.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) как отдельное нажатие клавиши, из-за чего нажатие на неё в OpenCodeShift+Enterне создаёт новую строку, а вместо этого напрямую отправляет сообщение.
Способ настройки Windows Terminal
Шаг 1:Откройтеsettings.jsonфайл Windows Terminal, путь:
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
Шаг 2:В корневомactionsмассиве файла добавьте следующую конфигурацию, чтобы определитьShift+Enterдействие, которое отправляет escape-последовательность:
Пример
{
"command": {
"action": "sendInput",
"input": "\u001b[13;2u" // Стандартная escape-последовательность для Shift+Enter (формат CSI u)
},
"id": "User.sendInput.ShiftEnterCustom"
}
]
Шаг 3:В корневомkeybindingsмассиве файла добавьте привязку клавиш, чтобы сопоставитьShift+Enterс действием, определённым выше:
Пример
{
"keys": "shift+enter",
"id": "User.sendInput.ShiftEnterCustom"
}
]
Шаг 4:Сохранитеsettings.jsonПосле сохранения файла перезапустите Windows Terminal или откройте новую вкладку, чтобы конфигурация вступила в силу.
Другие расширенияЕсли вы используете другие терминалы (такие как iTerm2, Kitty, Alacritty и т. д.), обратитесь к документации соответствующего терминала, найдите настройки, связанные с "Key Mappings" или "Key bindings", и установите
Shift+Enterего на отправку\u001b[13;2uescape-последовательность.