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

"actions": [
  {
    "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

"keybindings": [
  {
    "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.

Si 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 configureShift+Enterpara que envíe\u001b[13;2ula secuencia de escape.

Otras extensiones