Atajos de teclado
Personaliza tus atajos de teclado.
OpenCode tiene una lista de atajos de teclado que puedes personalizar mediante 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"
}
}Nota: En Windows, los valores predeterminados de
input_undoyterminal_suspendson diferentes:
input_undotiene como valor predeterminadoctrl+z,ctrl+-,super+zcuando no está configurado explícitamente. La vinculaciónctrl+zse agrega porque las terminales de Windows no admiten la suspensión POSIX.terminal_suspendse fuerza anoneporque las terminales nativas de Windows no admiten la suspensión POSIX.
Tecla Leader
OpenCode usa una tecla leader para muchos atajos de teclado. Esto evita conflictos en tu terminal.
De forma predeterminada, ctrl+x es la tecla leader y muchas acciones requieren que primero presiones la tecla leader y luego el atajo. Por ejemplo, para iniciar una nueva sesión, primero presionas ctrl+x y luego presionas n.
No necesitas usar una tecla leader para tus atajos, pero te recomendamos hacerlo.
Algunos atajos de navegación intencionalmente no usan la tecla leader de forma predeterminada. Para las sesiones de subagentes, los valores predeterminados son session_child_first = <leader>down, session_child_cycle = right, session_child_cycle_reverse = left y session_parent = up.
leader_timeout controla cuánto tiempo espera OpenCode la siguiente tecla después de la tecla leader. Su valor predeterminado es 2000 milisegundos.
Valores de vinculación
Una cadena puede contener un atajo o varios atajos separados por comas. También puedes usar un array para varios atajos.
Para casos avanzados, usa un objeto con key, event, preventDefault o fallthrough.
{
"$schema": "https://opencode.ai/tui.json",
"keybinds": {
"messages_copy": ["<leader>y", "ctrl+shift+c"],
"input_paste": {
"key": "ctrl+v",
"preventDefault": false
}
}
}Deshabilitar un atajo
Puedes deshabilitar un atajo agregando la clave a tui.json con un valor de "none" o false.
{
"$schema": "https://opencode.ai/tui.json",
"keybinds": {
"session_compact": "none"
}
}Atajos del prompt de escritorio
La entrada de prompt de la aplicación de escritorio de OpenCode admite atajos comunes al estilo Readline/Emacs para editar texto. Estos son integrados y actualmente no se pueden configurar mediante opencode.json.
| Atajo | Acción |
|---|---|
ctrl+a | Mover al inicio de la línea actual |
ctrl+e | Mover al final de la línea actual |
ctrl+b | Mover el cursor un carácter hacia atrás |
ctrl+f | Mover el cursor un carácter hacia adelante |
alt+b | Mover el cursor una palabra hacia atrás |
alt+f | Mover el cursor una palabra hacia adelante |
ctrl+d | Eliminar el carácter bajo el cursor |
ctrl+k | Borrar hasta el final de la línea |
ctrl+u | Borrar hasta el inicio de la línea |
ctrl+w | Borrar la palabra anterior |
alt+d | Borrar la palabra siguiente |
ctrl+t | Transponer caracteres |
ctrl+g | Cancelar popovers / abortar la respuesta en ejecución |
Shift+Enter
Algunas terminales no envían teclas modificadoras con Enter de forma predeterminada. Es posible que necesites configurar tu terminal para que envíe Shift+Enter como una secuencia de escape.
Windows Terminal
Abre tu settings.json en:
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.jsonAgrega esto al array actions de nivel raíz:
"actions": [
{
"command": {
"action": "sendInput",
"input": "\u001b[13;2u"
},
"id": "User.sendInput.ShiftEnterCustom"
}
]Agrega esto al array keybindings de nivel raíz:
"keybindings": [
{
"keys": "shift+enter",
"id": "User.sendInput.ShiftEnterCustom"
}
]Guarda el archivo y reinicia Windows Terminal o abre una nueva pestaña.