Einfügen in vim rückgängig machen

Einfügen in vim rückgängig machen

Ich kenne die Funktionen Rückgängig uund Ctrl-rWiederherstellen. uBringt mich aber zum letzten gespeicherten Zustand zurück. Ich möchte wissen, wie man einen Einfügevorgang rückgängig macht cmd-v.

Zum Beispiel,

I am typing here bla bla bla, [link to website](here I paste a wrong http link 
with cmd-v)

Dann möchte ich zurückgehen zu:

I am typing here bla bla bla, [link to website](

Gibt es eine Möglichkeit, dies in Vim zu tun?

Dank im Voraus.

Antwort1

Haftungsausschluss: Ich weiß überhaupt nicht, wie Apple-Tastaturen mit cmd statt ctrl mit vim interagieren, daher müssen Sie möglicherweise einiges davon ändern oder optimieren.

Die korrekte Art, in vim einzufügen, ist die Verwendung des pBefehls. Um aus der Systemzwischenablage einzufügen, würden Sie verwenden "*p. Die Standardmethode wäre also, den Einfügemodus zu verlassen und "*pa(der aruft natürlich den Einfügemodus wieder auf).

Wenn Sie eine Tastenkombination für den Einfügemodus wünschen, wäre es naheliegend, etwas wie Folgendes zu tun:

inoremap <c-v> <esc>"*pa

(Das heißt: Geben Sie tatsächlich ein, was da steht, anstatt Strg+V und Escape zu drücken.)

Auf den ersten Blick scheint es so zu seinsollenbietet das gewünschte Verhalten – es automatisiert lediglich den Standard-Einfügevorgang, den ich oben beschrieben habe. Aber das tut es nicht. Vim behandelt alle Teile eines Befehls als Teil desselben Rückgängig-Blocks, und für Vim ist der Einfügemodus selbst eine Art Befehl.

Sie können jedoch im Einfügemodus manuell einen neuen Rückgängig-Block starten, indem Sie Strg+G gefolgt von u(ja, ich weiß, diese Tastenkombination sieht ziemlich untypisch für Vim aus, aber so ist es nun einmal) drücken. Sie können die Tastenzuordnung also folgendermaßen ändern:

inoremap <c-v> <c-g>u<esc>"*pa

All dies funktioniert mit Strg+V (ich habe es gerade unter Windows getestet und dort funktioniert es zumindest), Sie müssen <c-v>für cmd-basierte Tastenkombinationen in vim möglicherweise etwas anderes (außer ) verwenden. Wenn Sie eine Apple-Tastatur verwenden, bedeutet dies OSX – wenn cmd+V eine Systemtastenkombination ist, bin ich mir nicht sicher, was Vorrang hätte. Einige oberflächliche Google-Suchen legen nahe, dass Sie möglicherweise an einigen Konfigurationen auf Betriebssystemebene herumfummeln müssen, damit cmd ordnungsgemäß mit vim funktioniert.

Antwort2

In MacVim müssen Sie die Zuordnung des Edit > PasteMenüelements aufheben, um die Tastenkombination zu überschreiben. Anschließend können Sie Cmd-V ( D-vin der MacVim-Sprache) dem entsprechenden Befehl in jedem Modus neu zuordnen. Ich habe dies zu meinem hinzugefügt ~/.gvimrcund jetzt funktioniert alles wunderbar:

macmenu Edit.Paste key=<nop>
noremap <D-v> "*P
cnoremap <D-v> <C-r><C-o>*
inoremap <D-v> <C-g>u<C-r><C-o>*

Das <C-g>uist nur im Einfügemodus erforderlich, um den Rückgängig-Verlauf zu korrigieren; die noremapund cnoremapdienen lediglich dazu, das standardmäßige Einfügeverhalten im Normal- und Befehlsmodus wiederherzustellen.

Vielen Dank an evilsoup, der mich hier in die richtige Richtung gelenkt hat.

verwandte Informationen