Explicación detallada de la configuración de atajos de teclado de OpenCode
OpenCode ofrece un sistema completo de atajos de teclado que cubre diversas operaciones como control de la aplicación, gestión de sesiones, navegación de mensajes, cambio de modelos y edición de entrada.
Todos los atajos de teclado se pueden personalizartui.jsonmediante el archivo.
Archivo de configuración
La configuración de atajos de teclado se escribe en el campotui.jsondel archivokeybindsdonde el nombre de clave de cada registro es el nombre de la operación y el valor es el atajo de teclado correspondiente:
Ejemplo
"$schema": "https://opencode.ai/tui.json",
"keybinds": {
"leader": "ctrl+x", // Configuración de la tecla líder (ver explicación a continuación)
"session_new": "<leader>n", // Nueva sesión: presione la tecla líder y luego n
"model_list": "<leader>m", // Abrir la lista de modelos: presione la tecla líder y luego m
"session_compact": "none" // Establecer el valor en "none" deshabilita este atajo
}
}
Una operación puede vincularse a múltiples atajos de teclado, separados por comas; al presionar cualquiera de ellos se ejecuta la operación:
Ejemplo
"$schema": "https://opencode.ai/tui.json",
"keybinds": {
// La siguiente notación indica: al presionar pageup o ctrl+alt+b, se puede desplazar una página hacia arriba
"messages_page_up": "pageup,ctrl+alt+b"
}
}
Tecla líder (Leader Key)
La mayoría de los atajos de teclado de OpenCode adoptanla tecla líder (Leader Key)como mecanismo: presione primero la tecla líder y luego la tecla de función; la combinación de ambas activa la operación correspondiente. La ventaja de este diseño es evitar conflictos con los atajos de teclado del propio terminal.
La tecla líder predeterminada esctrl+x. Por ejemplo, el atajo para crear una nueva sesión es<leader>n, y la operación real es: presione primeroctrl+x, y luego presionen。
Puede cambiar la tecla líder a cualquier combinación de teclas:
Ejemplo
"$schema": "https://opencode.ai/tui.json",
"keybinds": {
"leader": "ctrl+x" // Cambiar la tecla líder a otra tecla, como "ctrl+space", "alt+x", etc.
// El marcador de posición <leader> en la configuración se reemplaza automáticamente por la tecla establecida aquí
}
}
No es obligatorio utilizar el mecanismo de tecla líder para configurar atajos de teclado; también se pueden vincular directamente teclas normales o combinaciones de teclas. Sin embargo, se recomienda usar preferentemente la tecla líder para evitar conflictos con los atajos del terminal.
Deshabilitar atajos de teclado
Establezca el valor de cualquier atajo en"none"para deshabilitar la operación; una vez deshabilitada, ninguna tecla la activará:
Ejemplo
"$schema": "https://opencode.ai/tui.json",
"keybinds": {
"session_compact": "none", // Deshabilitar el atajo de "compresión de sesión"
"scrollbar_toggle": "none", // Deshabilitar el atajo de "alternar barra de desplazamiento"
"tips_toggle": "none" // Deshabilitar el atajo de "alternar consejos"
}
}
Lista completa de atajos de teclado
1. Aplicación e interfaz
| Nombre de la operación | Atajo predeterminado | Descripción |
|---|---|---|
app_exit |
ctrl+c, ctrl+d, <leader>q |
Salir de OpenCode |
editor_open |
<leader>e |
Abrir el contenido de entrada actual con un editor externo |
theme_list |
<leader>t |
Abrir la lista de temas para cambiar el tema de la interfaz |
sidebar_toggle |
<leader>b |
Mostrar u ocultar la barra lateral |
scrollbar_toggle |
Ninguno (deshabilitado por defecto) | Mostrar u ocultar la barra de desplazamiento |
username_toggle |
Ninguno (deshabilitado por defecto) | Mostrar u ocultar el nombre de usuario |
status_view |
<leader>s |
Ver la información de estado actual |
tool_details |
Ninguno (deshabilitado por defecto) | Ver los detalles de las llamadas a herramientas |
command_list |
ctrl+p |
Abrir el panel de comandos y buscar todos los comandos disponibles |
tips_toggle |
<leader>h |
Mostrar u ocultar los consejos de uso |
display_thinking |
Ninguno (deshabilitado por defecto) | Mostrar u ocultar el proceso de razonamiento del modelo |
terminal_suspend |
ctrl+z |
Suspender el terminal (enviar OpenCode al fondo y volver al shell; escribirfgpara reanudar) |
terminal_title_toggle |
Ninguno (deshabilitado por defecto) | Mostrar u ocultar la barra de título del terminal |
2. Gestión de sesiones
| Nombre de la operación | Atajo predeterminado | Descripción |
|---|---|---|
session_new |
<leader>n |
Crear una nueva sesión |
session_list |
<leader>l |
Ver la lista de todas las sesiones del historial |
session_export |
<leader>x |
Exportar el contenido de la sesión actual |
session_timeline |
<leader>g |
Ver la línea de tiempo de la sesión actual |
session_fork |
Ninguno (deshabilitado por defecto) | Crear una sesión ramificada desde la posición actual |
session_rename |
Ninguno (deshabilitado por defecto) | Renombrar la sesión actual |
session_share |
Ninguno (deshabilitado por defecto) | Compartir la sesión actual |
session_unshare |
Ninguno (deshabilitado por defecto) | Dejar de compartir la sesión actual |
session_interrupt |
escape |
Interrumpir la respuesta que se está ejecutando actualmente |
session_compact |
<leader>c |
Comprimir el contexto de la sesión actual para reducir el uso de tokens |
session_child_first |
<leader>↓ |
Saltar a la primera subsesión |
session_child_cycle |
<leader>→ |
Alternar cíclicamente hacia adelante entre las subsesiones |
session_child_cycle_reverse |
<leader>← |
Alternar cíclicamente hacia atrás entre las subsesiones |
session_parent |
<leader>↑ |
Volver a la sesión principal |
3. Navegación de mensajes
| Nombre de la operación | Atajo predeterminado | Descripción |
|---|---|---|
messages_page_up |
pageup, ctrl+alt+b |
Pasar una página hacia arriba en los mensajes |
messages_page_down |
pagedown, ctrl+alt+f |
Pasar una página hacia abajo en los mensajes |
messages_line_up |
ctrl+alt+y |
Desplazarse una línea hacia arriba |
messages_line_down |
ctrl+alt+e |
Desplazarse una línea hacia abajo |
messages_half_page_up |
ctrl+alt+u |
Desplazarse media página hacia arriba |
messages_half_page_down |
ctrl+alt+d |
Desplazarse media página hacia abajo |
messages_first |
ctrl+g, home |
Saltar al primer mensaje más antiguo |
messages_last |
ctrl+alt+g, end |
Saltar al último mensaje más reciente |
messages_next |
Ninguno (deshabilitado por defecto) | Saltar al siguiente mensaje |
messages_previous |
Ninguno (deshabilitado por defecto) | Saltar al mensaje anterior |
messages_last_user |
Ninguno (deshabilitado por defecto) | Saltar al último mensaje del usuario |
messages_copy |
<leader>y |
Copiar el contenido del mensaje actual al portapapeles |
messages_undo |
<leader>u |
Deshacer la última operación |
messages_redo |
<leader>r |
Rehacer la operación deshecha |
messages_toggle_conceal |
<leader>h |
Plegar o desplegar el contenido oculto de los mensajes |
4. Modelos y agentes
| Nombre de la operación | Atajo predeterminado | Descripción |
|---|---|---|
model_list |
<leader>m |
Abrir la lista de modelos para seleccionar o cambiar el modelo en uso |
model_cycle_recent |
f2 |
Alternar cíclicamente hacia adelante entre los modelos usados recientemente |
model_cycle_recent_reverse |
shift+f2 |
Alternar cíclicamente hacia atrás entre los modelos usados recientemente |
model_cycle_favorite |
Ninguno (deshabilitado por defecto) | Alternar cíclicamente hacia adelante entre los modelos favoritos |
model_cycle_favorite_reverse |
Ninguno (deshabilitado por defecto) | Alternar cíclicamente hacia atrás entre los modelos favoritos |
variant_cycle |
ctrl+t |
Alternar cíclicamente entre las variantes del modelo actual (como el modo thinking) |
agent_list |
<leader>a |
Abrir la lista de agentes para seleccionar o cambiar el agente en uso |
agent_cycle |
tab |
Alternar cíclicamente hacia adelante entre agentes |
agent_cycle_reverse |
shift+tab |
Alternar cíclicamente hacia atrás entre agentes |
5. Edición del campo de entrada
| Nombre de la operación | Atajo predeterminado | Descripción |
|---|---|---|
input_submit |
return |
Enviar el contenido de entrada actual |
input_newline |
shift+return, ctrl+return, alt+return, ctrl+j |
Insertar un salto de línea en el campo de entrada (sin enviar) |
input_clear |
ctrl+c |
Vaciar el contenido del campo de entrada |
input_paste |
ctrl+v |
Pegar el contenido del portapapeles en el campo de entrada |
input_move_left |
left, ctrl+b |
Mover el cursor un carácter a la izquierda |
input_move_right |
right, ctrl+f |
Mover el cursor un carácter a la derecha |
input_move_up |
up |
Mover el cursor una línea hacia arriba |
input_move_down |
down |
Mover el cursor una línea hacia abajo |
input_word_forward |
alt+f, alt+right, ctrl+right |
Saltar el cursor una palabra hacia adelante |
input_word_backward |
alt+b, alt+left, ctrl+left |
Saltar el cursor una palabra hacia atrás |
input_line_home |
ctrl+a |
Moverse al inicio de la línea actual |
input_line_end |
ctrl+e |
Moverse al final de la línea actual |
input_visual_line_home |
alt+a |
Moverse al inicio de la línea visual actual (la línea que se muestra envuelta) |
input_visual_line_end |
alt+e |
Moverse al final de la línea visual actual |
input_buffer_home |
home |
Saltar al comienzo de todo el contenido del campo de entrada |
input_buffer_end |
end |
Saltar al final de todo el contenido del campo de entrada |
input_delete_to_line_end |
ctrl+k |
Eliminar todo el contenido desde el cursor hasta el final de la línea actual |
input_delete_to_line_start |
ctrl+u |
Eliminar todo el contenido desde el inicio de la línea actual hasta el cursor |
input_delete_line |
ctrl+shift+d |
Eliminar toda la línea donde se encuentra el cursor |
input_backspace |
backspace, shift+backspace |
Eliminar el carácter anterior al cursor |
input_delete |
ctrl+d, delete, shift+delete |
Eliminar el carácter posterior al cursor |
input_delete_word_forward |
alt+d, alt+delete, ctrl+delete |
Eliminar la palabra posterior al cursor |
input_delete_word_backward |
ctrl+w, ctrl+backspace, alt+backspace |
Eliminar la palabra anterior al cursor |
input_undo |
ctrl+-, super+z |
Deshacer la última edición en el campo de entrada |
input_redo |
ctrl+., super+shift+z |
Rehacer la edición deshecha |
6. Selección de texto
| Nombre de la operación | Atajo de teclado predeterminado | Descripción |
|---|---|---|
input_select_left |
shift+left |
Seleccionar un carácter a la izquierda |
input_select_right |
shift+right |
Seleccionar un carácter a la derecha |
input_select_up |
shift+up |
Seleccionar una línea hacia arriba |
input_select_down |
shift+down |
Seleccionar una línea hacia abajo |
input_select_word_forward |
alt+shift+f, alt+shift+right |
Seleccionar una palabra hacia adelante |
input_select_word_backward |
alt+shift+b, alt+shift+left |
Seleccionar una palabra hacia atrás |
input_select_line_home |
ctrl+shift+a |
Seleccionar desde la posición del cursor hasta el inicio de la línea actual |
input_select_line_end |
ctrl+shift+e |
Seleccionar desde la posición del cursor hasta el final de la línea actual |
input_select_visual_line_home |
alt+shift+a |
Seleccionar desde la posición del cursor hasta el inicio de la línea visual actual |
input_select_visual_line_end |
alt+shift+e |
Seleccionar desde la posición del cursor hasta el final de la línea visual actual |
input_select_buffer_home |
shift+home |
Seleccionar desde la posición del cursor hasta el principio del campo de entrada |
input_select_buffer_end |
shift+end |
Seleccionar desde la posición del cursor hasta el final del campo de entrada |
7. Historial de entrada
| Nombre de la operación | Atajo de teclado predeterminado | Descripción |
|---|---|---|
history_previous |
up |
Recuperar la entrada histórica anterior (válido cuando el campo de entrada está vacío) |
history_next |
down |
Recuperar la siguiente entrada histórica |
Atajos de entrada integrados en la versión de escritorio
El campo de entrada de indicaciones de la versión de escritorio de OpenCode incluye adicionalmente un conjunto deatajos de edición de texto de estilo Readline / Emacs,estos atajos son funciones integradas y no se puedenEstos atajos son funciones integradas y no se puedentui.jsonmodificar ni deshabilitar:
| mediante atajos de teclado | 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 en la posición del cursor |
ctrl+k |
Eliminar desde el cursor hasta el final de la línea |
ctrl+u |
Eliminar desde el cursor hasta el inicio de la línea |
ctrl+w |
Eliminar la palabra anterior |
alt+d |
Eliminar la palabra siguiente |
ctrl+t |
Intercambiar la posición de los dos caracteres a ambos lados del cursor |
ctrl+g |
Cancelar la ventana emergente actual o detener la respuesta en curso |
Configurar Shift+Enter para salto de línea
Algunos terminales, de forma predeterminada, no envían la tecla Enter con modificadores (por ejemplo,Shift+Enter) como una tecla independiente, lo que hace que al presionarShift+Enteren OpenCode no se inserte una nueva línea sino que se envíe el mensaje directamente. Es necesario configurar manualmente la secuencia de escape de esa tecla en el terminal.
Método de configuración en Windows Terminal
Primer paso:Abra elsettings.jsonarchivo de Windows Terminal, cuya ruta es:
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
Segundo paso:En el nivel raíz del archivo,actionsagregue la siguiente configuración a la matriz para definir una acción que envíaShift+Enterla secuencia de escape:
Ejemplo
{
"command": {
"action": "sendInput",
"input": "\u001b[13;2u" // Secuencia de escape estándar correspondiente a Shift+Enter (formato CSI u)
},
"id": "User.sendInput.ShiftEnterCustom"
}
]
Tercer paso:En el nivel raíz del archivo,keybindingsagregue un enlace de teclas en la matriz y asígneloShift+Entera la acción definida anteriormente:
Ejemplo
{
"keys": "shift+enter",
"id": "User.sendInput.ShiftEnterCustom"
}
]
Cuarto paso:Guarde elsettings.jsonarchivo y luego reinicie Windows Terminal o abra una nueva pestaña para que la configuración surta efecto.
Otras extensionesSi utiliza otros terminales (como iTerm2, Kitty, Alacritty, etc.), consulte la documentación del terminal correspondiente, busque la configuración relacionada con 'mapeo de teclas' o 'Key bindings', y configure
Shift+Enterpara que envíe\u001b[13;2ula secuencia de escape.