In vim, wenn ich drücke ESC
, um in den Befehlsmodus zurückzukehren, bewegt sich der Cursor ein Zeichen nach links. Dies ist nicht das, was ich mir erhoffen würde, gelegentlich drücke ich sofort l
, um zu dieser Stelle zurückzukehren, um vielleicht einen Charakter zu löschen.
Gibt es einen Grund für dieses Verhalten? Ist das praktisch für ein Verwendungsmuster, das mir fehlt?
Antworten:
Im Einfügemodus befindet sich der Cursor zwischen Zeichen oder vor dem ersten oder nach dem letzten Zeichen. Im normalen Modus befindet sich der Cursor über einem Zeichen (Zeilenumbrüche sind für diesen Zweck keine Zeichen). Dies ist etwas ungewöhnlich: Die meisten Editoren setzen den Cursor immer zwischen Zeichen und lassen die meisten Befehle auf das Zeichen nach dem Cursor (nicht, genau genommen, unter dem Cursor) wirken. Dies ist möglicherweise teilweise auf die Tatsache zurückzuführen, dass Textterminals vor GUIs immer den Cursor auf einem Zeichen zeigten (Unterstreichen oder Blockieren, möglicherweise Blinken). Diese Abstraktion schlägt im Einfügemodus fehl, da dies eine weitere Position erfordert (Pfosten gegen Zäune).
Das Umschalten zwischen den Modi muss den Cursor sozusagen um ein halbes Zeichen bewegen. Der
i
Befehl bewegt sich nach links, um den Cursor vor das Zeichen zu setzen, über dem er sich befunden hat. Dera
Befehl bewegt sich nach rechts. Beim EscVerlassen des Einfügemodus (durch Drücken von ) wird der Cursor nach Möglichkeit nach links verschoben (wenn er sich am Zeilenanfang befindet, wird er stattdessen nach rechts verschoben).Ich nehme an, das EscVerhalten macht irgendwie Sinn. Oft tippt man am Ende der Zeile und Esckann dort nur nach links gehen. Das allgemeine Verhalten ist also das häufigste Verhalten.
Stellen Sie sich das Zeichen unter dem Cursor als das letzte interessante Zeichen vor und den Befehl Einfügen als
a
. Sie können wiederholen, a Escohne den Cursor zu bewegen, mit der Ausnahme, dass Sie eine Position nach rechts springen, wenn Sie am Anfang einer nicht leeren Zeile beginnen.quelle
Optisch macht es in gvim mehr Sinn:
Während der Bearbeitung befindet sich der Cursor zwischen den Zeichen:
Im normalen Modus steht es über dem letzten Zeichen:
So ist es nicht wirklich ein Zeichen zurückgehen, nur davon , dass zwischen
r
unds
zu sein aufr
quelle
m
bei der Rückkehr in den normalen Modus hervorgehoben bleiben sollte ...Dieses Verhalten kann wie hier beantwortet bearbeitet werden , aber denken Sie eine Sekunde lang darüber nach, was los ist. Wenn Sie sich im Einfügemodus befinden, befinden Sie sich nicht über einem Zeichen, sondern ZWISCHEN diesen. Wenn Sie etwas einfügen, springt der Cursor an das Ende von dem, was Sie eingefügt haben, so dass das nächste eingefügte Objekt danach ist. Denken Sie jetzt darüber nach, ob Sie gerade einen Brief getippt haben und dann etwas damit anfangen wollten. Wenn Sie drücken Esc, wird der Auswahlcursor direkt über das zuletzt eingegebene Zeichen gesetzt. Wenn es dies nicht tun würde, wäre es tatsächlich ziemlich umständlich.
Die Situation, an die Sie wahrscheinlich denken, ist, wenn Sie sich im Einfügemodus wie im normalen Modus bewegen und dann wechseln. In diesem Fall scheint der Cursor ein Zeichen zurück zu gehen, aber wenn Sie so denken, zeigt dies, dass Sie sich im Einfügemodus befanden und das letzte, was Sie getan haben, war NICHT Einfügen. Vielleicht solltest du mehr Zeit im normalen Modus verbringen?
quelle
i
undESC
Tastendrücken?i
gefolgt vonESC
ist eine Funktion voni
und ist völlig unabhängig vonESC
; Wenn Sie aufi
drücken, fordern Sie vim auf , ein Zeichen einzufügen , was per Definition "Einfügen eines Zeichens vor dem Zeichen, auf dem ich mich befinde" bedeutet, im Gegensatz zua
"Anhängen eines Zeichens nach dem Zeichen".Geben Sie Alt+ ein L, um zum Befehlsmodus zurückzukehren.
Es ist keine Neuzuordnung oder Änderung der VIM-Konfiguration erforderlich. Dies funktioniert, da bei den meisten Terminalemulatoren Alt+ KEYein Escgefolgt von gesendet wird KEY(unter xterm müssen Sie möglicherweise eine
Xterm*metaSendsEscape: true
Zeile in Ihre ~ / .Xdefaults-Datei einfügen). Mit diesem Verhalten können Sie sogar andere Einfügemoduskombinationen "erstellen", die sofort funktionieren - wie Alt+ Sto Backspace.Übrigens kann es sehr unpraktisch sein, den Cursor über dem gerade geschriebenen Zeichen zu haben. EscdwLöscht beispielsweise nicht das Wort, das dem gerade eingefügten Text folgt.
quelle
Esc d e
das vorangestellte Wort löschen. Ich kehrte zum Standardverhalten zurück, weil ich das Gefühl hatte, dass es andere Verhaltensweisen veränderte, die bereits in meinem Kopf kodiert waren.Hier ist meine Lösung.
Es ist eine knappe Version der Lösung, die auf der Wikia-Seite dazu angeboten wird .
quelle