Zusamenfassend:
- Schlüsselcodes sind eine Möglichkeit, einen Schlüssel darzustellen
- Eine zugeordnete Tastenfolge ist eine Folge von Tastencodes, die eine Aktion auslösen
Jetzt denke ich, dass sich Ihre Frage eher auf den Unterschied zwischen timeoutlen
und als ttimeoutlen
auf den Unterschied zwischen einer zugeordneten Tastenfolge und einem Tastencode bezieht.
Meine Antwort basiert auf diesem Wikia-Artikel , den Sie unbedingt lesen sollten, da er einige Punkte anspricht, die ich hier nicht erwähnt habe, um die Antwort so kurz und klar wie möglich zu halten.
Lassen Sie uns zuerst über Schlüsselcodes sprechen. Der Artikel definiert zwei Arten von Schlüsselcodes:
Terminal-Schlüsselcodes:
Sie sind, wie das Terminal einen Schlüssel darstellt.
Diese Codes, die vom Terminal an Vim gesendet werden.
Um eine Liste dieser Schlüsselcodes zu erhalten, sollten Sie Ihre Terminaldokumentation verwenden. Sie können sie auch anzeigen, indem Sie den Befehl cat
in Ihr Terminal eingeben und den Schlüssel eingeben, dessen Schlüsselcode Sie wissen möchten. Zum Beispiel ShiftF1sieht auf meinem Terminal der Schlüsselcode für so aus:
^[[23~
Vim-Schlüsselcodes:
Sie sind, wie vim einen Schlüssel darstellen.
Vim benötigt eine konsistente Darstellung der Schlüssel, da sich die Schlüsselcodes des Terminals von einem Terminal zum anderen ändern. Eine Liste der Vim-Schlüsselcodes finden Sie unter :h t_ku
. Der Vim-Schlüsselcode für ShiftF1sieht folgendermaßen aus:
<S-F1>
Wenn ich also ShiftF1auf meiner Tastatur drücke, teilen die Treiber und das Betriebssystem dem Terminal mit, dass ich diese Tasten gedrückt habe, die es interpretieren wird ^[[23~
. Das Terminal sendet das an Vim, das versteht, dass dies bedeutet, <S-F1>
und löst die Aktion aus, die diesem Tastencode zugeordnet ist.
Wir können Vim-Schlüsselcodes festlegen. Wenn Ihr Terminal also einen von Vim nicht verstandenen Schlüsselcode sendet, können <S-F1>
Sie beispielsweise den folgenden Befehl verwenden. Dies teilt Vim mit, wann Sie den Schlüsselcode erhalten ^[[24~
haben <S-F1>
.
set <S-F1> ^[[24~
Was ist eine zugeordnete Tastenfolge?
Eine zugeordnete Tastenfolge ist ein lhs einer Zuordnung und kann Vim-Tastencodes oder Terminal-Tastencodes sein. Beispielsweise:
:nmap ^[[24~ :bn<CR>
:nmap <S-F1> :bn<CR>
Die erste Zuordnung ordnet den Terminal-Schlüsselcode zu, während die zweite den Vim-Schlüsselcode ordnet.
Nun zum Unterschied zwischen timeoutlen
und ttimeoutlen
?
ttimeoutlen
Vim ist die Zeit für die verschiedenen Teile eines Terminals Tastencodes warten (in unserem vorherigen Beispiel , das wäre ^[
dann [
dann 2
, etc ...
Da diese Schlüsselcodes vom Terminal gesendet werden, sollte es keine Verzögerung zwischen diesen Eingaben geben (da sie vom Terminal auf einmal gesendet werden). Aus diesem Grund empfiehlt das Dokument einen sehr kleinen Wert für diese Einstellung.
timeoutlen
ist die Zeit, die Vim auf die aufeinanderfolgenden Vim-Schlüsselcodes wartet, die von einem Benutzer manuell eingegeben werden, und ist daher länger als die Eingabe eines Terminal-Schlüsselcodes.
Um ein Beispiel zu verwenden, sagen wir, dass:
- Sie haben
^[[1;6B
eine Aktion zugeordnet
^[1;6B
ist der Schlüsselcode Ihres Terminals für ctrlshiftdown
^[
ist der Schlüsselcode Ihres Terminals für Escape.
Das Verhalten, das Sie erwarten sollten:
- Wenn Sie bei
ttimeoutlen
jeder EscapeEingabe ein großes Zeichen setzen, wartet Vim, ob Sie ^[
(dh Escape) oder ^[1;6B
(dh ctrlshiftdown) gemeint haben.
- Wenn Sie einen kleinen Wert festlegen
ttimeoutlen
, wird die Eingabe nicht verzögert, Escapeda Vim weiß, dass es sich um einen vollständigen Schlüsselcode handelt.
Und timeoutlen
wird auf einer höheren Ebene agieren, wenn Sie die folgenden Zuordnungen haben:
inoremap jj <Esc>
inoremap jk <Esc>:nohl<CR>
Wenn Sie jvim eingeben, wird timeoutlen
nicht gewartet , weil der Anfang des Terminal-Schlüsselcodes für jnicht vollständig ist, sondern weil er auf den nächsten Vim-Schlüsselcode wartet.
Ich hoffe, dass meine Erklärung sinnvoll ist. Beachten Sie, dass einige der verwendeten Zuordnungen aus funktionaler Sicht keinen Sinn ergeben, aber der Einfachheit halber hier aufgeführt sind.