
Ich kenne die Funktionen Rückgängig u
und Ctrl-r
Wiederherstellen. u
Bringt 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 p
Befehls. Um aus der Systemzwischenablage einzufügen, würden Sie verwenden "*p
. Die Standardmethode wäre also, den Einfügemodus zu verlassen und "*pa
(der a
ruft 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 > Paste
Menüelements aufheben, um die Tastenkombination zu überschreiben. Anschließend können Sie Cmd-V ( D-v
in der MacVim-Sprache) dem entsprechenden Befehl in jedem Modus neu zuordnen. Ich habe dies zu meinem hinzugefügt ~/.gvimrc
und 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>u
ist nur im Einfügemodus erforderlich, um den Rückgängig-Verlauf zu korrigieren; die noremap
und cnoremap
dienen 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.