Warum wird der zuvor eingefügte Text nach Verwendung einer Pfeiltaste zurückgesetzt?


7

Von der Hilfe :help i_ctrl-a:

CTRL-A      Insert previously inserted text.  {not in Vi}

Angenommen, ich habe einen leeren Puffer und bin im normalen Modus.
Ich tippe i, um in den Einfügemodus zu wechseln.
Ich tippe (), bewege dann den Cursor ein Zeichen nach links, indem <C-h>ich drücke (was ich <left>im Einfügemodus zugeordnet habe), tippe foound gehe durch Drücken von Escape in den normalen Modus zurück.

Der Puffer enthält: (foo)
Ich dachte fälschlicherweise, dass der zuvor eingefügte Text wäre, (foo)aber es ist nicht.
Der zuvor eingefügte Text fookann nur durch erneutes Tippen :registers .oder Drücken <C-a>im Einfügemodus überprüft werden .

Warum wird durch Drücken einer Pfeiltaste der zuvor eingefügte Text zurückgesetzt?
Gibt es eine Möglichkeit, im Punktregister den gesamten Text zu speichern, der beim letzten Aufrufen des Einfügemodus eingefügt wurde, obwohl ich eine Pfeiltaste gedrückt habe?

Antworten:


6

Im Einfügemodus verlässt die linke Pfeiltaste den Einfügemodus, bewegt den Cursor und wechselt dann wieder in den Einfügemodus. Das unterteilt Ihre Änderung in zwei Änderungen: Einfügen ()und Einfügen foo. Dieses Verhalten wird unter erläutert

:help ins-special-special

Die Lösung besteht darin, die linke Pfeiltaste neu zuzuordnen CTRL-G U. Das Beispiel im Vim-Referenzhandbuch ist schwer zu finden, da es nicht direkt markiert ist. Gehen Sie zuerst zu

:help i_CTRL-G_U

Scrollen Sie dann 42 Zeilen nach unten zu "Ein Beispiel für die Verwendung von CTRL-G U:" Verwenden Sie für die linke Pfeiltaste diese Zuordnung:

inoremap <Left> <C-G>U<Left>

Es scheint zu funktionieren, aber die Anzeige des .Registers durch den :registersBefehl sieht nach der Ausführung Ihres (foo)Beispiels seltsam aus . Auf meinem Windows-Computer sieht es so aus:

".  ()^GU<80>klfoo

1
Vielen Dank ! Das hat mich schon lange gestört und nie die Lösung gefunden. Ich habe mein vimrc mit inoremap <C-h> <C-g>U<Left>und modifiziert inoremap <C-l> <C-g>U<Right>und Ihre Lösung funktioniert perfekt! Übrigens, auf meinem Linux-Rechner habe ich die gleiche seltsame Ausgabe wie Sie für den :registersBefehl, daher kommt er nicht von Windows.
Saginaw

2
<c-g>Ukam mit einem aktuellen Patch. Das könnte erklären, warum Sie es bisher verpasst haben.
Luc Hermitte

Glaubst du, es gibt eine Möglichkeit, es auch mit Strg + Rechts / Links zum Laufen zu bringen? Ich habe analoge Zuordnungen versucht, aber sie scheinen nicht zu funktionieren.
Patryk Czachurski
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.