En breve:
- los códigos clave son una forma de representar una clave
- Una secuencia de teclas asignada es una sucesión de códigos clave que activan una acción.
Ahora creo que su pregunta es más sobre la diferencia entre timeoutlen
y en ttimeoutlen
lugar de la diferencia entre una secuencia de teclas asignada y un código de tecla.
Mi respuesta se basa en este artículo de wikia que realmente debería leer porque aborda algunos puntos que no mencioné aquí para mantener la respuesta lo más breve y clara posible.
Primero hablemos de los códigos clave. El artículo define dos tipos de códigos clave:
Códigos clave del terminal:
Son cómo el terminal representa una clave.
Estos códigos que son enviados por el terminal a Vim.
Para obtener una lista de estos códigos de teclas, debe usar la documentación de su terminal. También puede verlos escribiendo el comando cat
en su terminal y escribiendo la clave que desea conocer el código clave. Por ejemplo, en mi terminal, el código clave para ShiftF1parece:
^[[23~
Vim códigos clave:
Son cómo vim representa una clave.
Vim necesita una forma consistente de representar las claves porque los códigos de clave de la terminal cambian de una terminal a otra. Se puede acceder a una lista de códigos de teclas de Vim en :h t_ku
. El código clave de Vim para ShiftF1parece:
<S-F1>
Por lo tanto, cuando ShiftF1presiono mi teclado, los controladores y el sistema operativo le informarán al terminal que presioné estas teclas que interpretará ^[[23~
. El terminal lo enviará a Vim, lo que comprenderá que significa <S-F1>
y activará la acción asignada a este código clave.
Podemos establecer códigos de teclas de Vim, por lo que si su terminal envía un código de clave que Vim no entiende, <S-F1>
por ejemplo, puede usar el siguiente comando. Esto le dirá a Vim cuando reciba el código clave ^[[24~
, traducirlo tiene <S-F1>
:
set <S-F1> ^[[24~
Entonces, ¿qué es una secuencia de teclas asignada?
Una secuencia de teclas asignada será un lhs de una asignación y puede ser códigos de teclas Vim o códigos de teclas de Terminal. Por ejemplo:
:nmap ^[[24~ :bn<CR>
:nmap <S-F1> :bn<CR>
La primera asignación asignará el código clave del terminal, mientras que la segunda asignará el código clave Vim.
Ahora para la diferencia entre timeoutlen
y ttimeoutlen
?
ttimeoutlen
es el momento de Vim esperar a que las diferentes partes de un terminal de códigos de teclas (en nuestro ejemplo anterior que serían ^[
luego [
a continuación 2
, etc ...
Como estos códigos clave son enviados por el terminal, no debe haber un retraso entre estas entradas (ya que el terminal los envía 'todos a la vez'). Esta es la razón por la cual el documento recomienda un valor realmente pequeño para esta configuración.
timeoutlen
es el tiempo que Vim esperará por los códigos de tecla de Vim sucesivos que un usuario ingresa manualmente y, por lo tanto, es más largo de ingresar que un código clave de terminal.
Para usar un ejemplo, digamos que:
- Mapeaste
^[[1;6B
a una acción
^[1;6B
es el código clave de su terminal para ctrlshiftdown
^[
es el código clave de su terminal para Escape.
El comportamiento que debe esperar:
- Si establece un valor grande
ttimeoutlen
, cada vez que escribe Escape, Vim esperará para ver si quiso ^[
decir (es decir Escape) o ^[1;6B
(es decir ctrlshiftdown)
- Si configura un pequeño
ttimeoutlen
, no tendrá un retraso cuando escriba Escapeporque Vim sabrá que es un código clave completo.
Y timeoutlen
actuará en un 'nivel superior', si tiene las siguientes asignaciones:
inoremap jj <Esc>
inoremap jk <Esc>:nohl<CR>
Cuando escriba jvim esperará timeoutlen
no porque el comienzo del código clave del terminal jno esté completo sino porque está esperando el siguiente código clave Vim.
Espero que mi explicación tenga sentido, tenga en cuenta que algunas de las asignaciones que utilicé no tienen sentido desde un punto de vista funcional, pero están aquí para su conveniencia.