Настройка горячих клавиш 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-последовательность:

Пример

"actions": [
  {
    "command": {
      "action": "sendInput",
"input": "\u001b[13;2u" // Стандартная escape-последовательность для Shift+Enter (формат CSI u)
    },
    "id": "User.sendInput.ShiftEnterCustom"
  }
]

Шаг 3:В корневомkeybindingsмассиве файла добавьте привязку клавиш, чтобы сопоставитьShift+Enterс действием, определённым выше:

Пример

"keybindings": [
  {
    "keys": "shift+enter",
    "id": "User.sendInput.ShiftEnterCustom"
  }
]

Шаг 4:Сохранитеsettings.jsonПосле сохранения файла перезапустите Windows Terminal или откройте новую вкладку, чтобы конфигурация вступила в силу.

Если вы используете другие терминалы (такие как iTerm2, Kitty, Alacritty и т. д.), обратитесь к документации соответствующего терминала, найдите настройки, связанные с "Key Mappings" или "Key bindings", и установитеShift+Enterего на отправку\u001b[13;2uescape-последовательность.

Другие расширения