Ich habe ein seltsames Problem mit einer Normalmodus-Zuordnung von Esc.
Wenn Sie die Datei escmapvimrc
mit dem Inhalt erstellen :
set nocompatible
set showcmd " Doesn't affect the problem: just makes it easier to see
nnoremap <Esc> :noh<CR><esc>
Und dann starte vim mit diesem vimrc:
vim --noplugin -u escmapvimrc
Dann startet vim im Operator-Pending-Modus, wobei ein c
Befehl auf weitere Eingaben wartet, eine leere Datei anzeigt und die Befehlszeile angezeigt wird :noh
.
Wenn Sie die nnoremap
Leitung entfernen , wird das Problem behoben.
Wenn Sie alles debuggen und durchgehen, erhalten Sie die folgende Ausgabe:
Entering Debug mode. Type "cont" to continue.
/[...]/escmapvimrc
line 1: set nocompatible
>s
/[...]/escmapvimrc
line 2: set showcmd " Doesn't affect the problem: just makes it easier to see
>s
/[...]/escmapvimrc
line 3: nnoremap <Esc> :noh<CR><esc>
>s
/[...]/escmapvimrc
line 4: End of sourced file
>s
Press ENTER or type command to continue
Nachdem Sie die Eingabetaste gedrückt haben, wird der Vim-Startbildschirm angezeigt und darunter:
Entering Debug mode. Type "cont" to continue.
cmd: noh
>s
Der Vim-Startbildschirm wird dann ausgeblendet und Sie befinden sich wie oben beschrieben im Modus für ausstehende Bedienereingaben.
Was ist los?
BEARBEITEN: Das Verhalten ist wie in Vim 7.3 beschrieben. In Vim 7.4.52 wird nmap
Vim im Ersetzungsmodus gestartet, wenn Vim ohne Datei gestartet wird. (Wenn Vim 7.4.52 jedoch mit einer Datei gestartet wird , wird auch ein C-Befehl ausgeführt.) In beiden Fällen verschwindet das Problem, wenn die nmap entfernt wird.
quelle
:noh
für mich nicht angezeigt. Dasselbe mit gvim zu tun, zeigte dieses Verhalten nicht.nnoremap <c-l> :noh<cr><c-l>
/alksdjflaskj
, um das Suchhighlight zu löschen, was ebenfalls recht schnell ist.Antworten:
Vim sendet während des Startvorgangs einige spezielle Terminalcodes (die normalerweise den
<esc>
Schlüssel enthalten ), um verschiedene Dinge (Farben, bs, ...) zu bestimmen, die Sie zugeordnet haben<esc>
.Verwenden Sie Ihre obige Karte daher erst, wenn alles korrekt eingerichtet wurde (z. B. über einen VimEnter-Befehl).
quelle
'term'
Option aktiviert ist. Dies ist normalerweise nur während des Startvorgangs der Fall, es kann jedoch Szenarien geben, in denen dies zur Laufzeit festgelegt wird.VimEnter
speziell nicht funktioniert.Das Linux-Terminal verwendet ANSI-Escape-Sequenzen (dh Zeichenfolgen, die mit beginnen)
<Esc>
), um Sonderschlüssel an Vim zu senden und als Teil des Kommunikationsprotokolls, mit dem die Anwendung ihre Funktionen abfragt. Ihre Zuordnung stört das und führt dadurch zu diesen "seltsamen" Verhaltensweisen.Deshalb nicht abbilden
<Esc>
. Verwenden Sie einen anderen Schlüssel. Das Problem ist in GVIM weniger ausgeprägt, aber ich würde es dort auch nicht empfehlen.quelle
<Esc><Esc>
?Versuche dies:
Siehe /programming//a/16027716/400545
quelle
Ich habe versucht, einen automatischen Befehl einzurichten, um die Zuordnung später beim Start festzulegen, aber das Problem trat immer noch auf. *
Ich habe schließlich einen automatischen Befehl erstellt, der beim ersten Aufrufen des Einfügemodus ausgeführt wird. Dies ist natürlich keine perfekte Lösung, aber für mich funktioniert es die meiste Zeit und es scheint das Beste zu sein, was ich tun kann:
UPDATE : Nachdem ich die folgende längere Version einige Jahre lang ohne Probleme verwendet hatte, entschied ich, dass sie möglicherweise etwas überarbeitet war. Seitdem habe ich diese viel einfachere Version verwendet, die stattdessen das Mapping jedes Mal zurücksetzt, wenn Sie in den Einfügemodus wechseln:
Die Zuordnung nicht brauchen , um jedes Mal , wenn Insert - Modus zurückgesetzt werden, aber es macht auch keinen Schaden für Vim , dies zu tun.
ORIGINAL VERSION :
* Habe ich versucht , es zu verschiedenen Veranstaltungen Befestigung:
VimEnter
,BufReadPost
,BufWinEnter
, und auchCursorMoved
(!), Aber diese alle zu früh , um Feuer zu sein scheinen.quelle
TermResponse
Befehl autocommand ausprobiert ?