En bref:
- les codes-clés sont un moyen de représenter une clé
- Une séquence de touches mappée est une succession de codes clés déclenchant une action
Maintenant, je pense que votre question concerne davantage la différence entre timeoutlen
et ttimeoutlen
au lieu de la différence entre une séquence de touches mappée et un code de clé.
Ma réponse est basée sur cet article wikia que vous devriez vraiment lire car il aborde certains points que je n'ai pas mentionnés ici pour garder la réponse aussi courte et claire que possible.
Parlons d'abord des codes clés. L'article définit deux types de codes clés:
Codes clés du terminal:
C'est ainsi que le terminal représente une clé.
Ces codes qui sont envoyés par le terminal à Vim.
Pour obtenir une liste de ces codes clés, vous devez utiliser la documentation de votre terminal. Vous pouvez également les voir en tapant la commande cat
dans votre terminal et en tapant la clé dont vous voulez connaître le code clé. Par exemple, sur mon terminal, le code clé pour ShiftF1ressemble à:
^[[23~
Codes clés Vim:
C'est ainsi que vim représente une clé.
Vim a besoin d'un moyen cohérent de représenter les clés car les codes de clé du terminal changent d'un terminal à un autre. Une liste des codes clés Vim est accessible à l'adresse :h t_ku
. Le code clé Vim pour ShiftF1ressemble à:
<S-F1>
Ainsi, lorsque j'appuie ShiftF1sur mon clavier, les pilotes et le système d'exploitation indiquent au terminal que j'ai appuyé sur ces touches qu'il interprètera comme ^[[23~
. Le terminal enverra cela à Vim qui comprendra que cela signifie <S-F1>
et déclenchera l'action mappée à ce code clé.
Nous pouvons définir des codes clés Vim, donc si votre terminal envoie un code clé que Vim ne comprend pas, <S-F1>
par exemple, vous pouvez utiliser la commande suivante. Cela indiquera à Vim lorsque vous recevrez le code clé ^[[24~
, traduisez-le <S-F1>
:
set <S-F1> ^[[24~
Qu'est-ce qu'une séquence de touches mappée?
Une séquence de touches mappée sera un lhs d'un mappage et peut être des codes de clé Vim ou des codes de clé de terminal. Par exemple:
:nmap ^[[24~ :bn<CR>
:nmap <S-F1> :bn<CR>
Le premier mappage mappera le code clé du terminal tandis que le second mappera le code clé Vim.
Maintenant, pour la différence entre timeoutlen
et ttimeoutlen
?
ttimeoutlen
est le temps que Vim attendra pour les différentes parties d'un code clé de terminal (dans notre exemple précédent ce serait ^[
alors [
alors 2
, etc ...
Étant donné que ces codes clés sont envoyés par le terminal, il ne devrait pas y avoir de délai entre ces entrées (car ils sont envoyés «tout à la fois» par le terminal). C'est pourquoi le doc recommande une très petite valeur pour ce paramètre.
timeoutlen
est le temps que Vim attendra pour les codes-clés Vim successifs qui sont entrés manuellement par un utilisateur et est donc plus long à saisir qu'un code-clé de terminal.
Pour utiliser un exemple, disons que:
- Vous avez mappé
^[[1;6B
à une action
^[1;6B
est le code clé de votre terminal pour ctrlshiftdown
^[
est le code clé de votre terminal pour Escape.
Le comportement auquel vous devez vous attendre:
- Si vous définissez un grand
ttimeoutlen
, chaque fois que vous tapez Escape, Vim attendra de voir si vous vouliez dire ^[
(ie Escape) ou ^[1;6B
(ie ctrlshiftdown)
- Si vous définissez un petit
ttimeoutlen
, vous n'aurez pas de délai lorsque vous taperez, Escapecar Vim saura qu'il s'agit d'un code clé complet.
Et timeoutlen
agira à un «niveau supérieur», si vous disposez des mappages suivants:
inoremap jj <Esc>
inoremap jk <Esc>:nohl<CR>
Lorsque vous tapez jvim attendra timeoutlen
non pas parce que le début du code clé du terminal jn'est pas terminé mais parce qu'il attend le code clé Vim suivant.
J'espère que mon explication a du sens, notez que certains des mappages que j'ai utilisés n'ont pas de sens d'un point de vue fonctionnel mais sont ici pour la commodité de l'explication.