TL; DR; version - Wie mache ich Text rückgängig, der aus meinem OS-Kopierpuffer eingefügt wurde, ohne anderen Text rückgängig zu machen, der seit dem Wechsel in den Einfügemodus eingegeben wurde?
Längere Beschreibung:
- Legen Sie etwas in den Kopierpuffer Ihres Betriebssystems (z. B. markieren Sie Text und tun Sie dies
Command-c
auf dem Mac) - Wechseln Sie in vim (
i
) in den Einfügemodus - Tippe etwas (zB
asdf
) - Fügen Sie aus dem Kopierpuffer in vim (
Command-v
auf dem Mac) ein, ohne den Einfügemodus zu verlassen. - Schlagen
escape
- Versuche die Paste rückgängig zu machen (
u
)
Es macht alles rückgängig, seit Sie das letzte Mal in den Einfügemodus gegangen sind. Mit anderen Worten, es wird gelöscht asdf
und der gesamte Text, den ich eingefügt habe.
Wie mache ich den eingefügten Text einfach rückgängig? Muss ich immer den Einfügemodus verlassen und wieder einsteigen, bevor ich Text einfüge, um den eingefügten Text rückgängig machen zu können?
:h i_CTRL-G_u
(dh "Sequenz rückgängig machen, neue Änderung starten" im Einfügemodus).In MacVim müssen Sie die Zuordnung des Menüelements aufheben,
Edit > Paste
um die Verknüpfung zu überschreiben. Anschließend können Sie Cmd-V (D-v
im MacVim-Sprachgebrauch) in jedem Modus dem entsprechenden Befehl zuordnen. Ich habe dies zu meinem hinzugefügt~/.gvimrc
und jetzt funktioniert alles wunderbar:Dies
<C-g>u
ist nur im Einfügemodus erforderlich, um den Rückgängig-Verlauf zu korrigieren. Dienoremap
undcnoremap
dienen lediglich dazu, das Standard-Einfügeverhalten im Normal- und Befehlsmodus wiederherzustellen.Vielen Dank an Ingo Karkat, der mich hier in die richtige Richtung gelenkt hat.
quelle
Eigentlich besteht die Lösung darin, dass Sie zuerst in den Befehlsmodus (z. B. Esc) wechseln und den Einfügemodus erneut aufrufen müssen. Dies funktioniert jedoch nur, wenn ich manuell tippe, aber es scheint "zufällig" nicht mehr zu funktionieren, wenn ich es teste
~/.vimrc
. Google hilft überhaupt nicht.Ich verbringe viel Zeit damit, dieses Problem zu beheben, und finde nur den Grund in meinem Fall heraus:
Ordnen Sie den Einfügeschlüssel nicht dem vorhandenen Einfügeschlüssel des Terminals zu
zB Ctrl+Shift+Vwird in meiner Konsole Terminal einfügen, aber wenn ich diese Taste zuweisen
<C-S-v>
in~/.vimrc
der „Undo für nur einzelne Paste anstelle von mehreren Pasten“ wird nicht funktioniert.In meinem Fall muss ich
<C-v>
anstelle von verwenden<C-S-v>
:Ihr Fall mag sich unterscheiden, aber der Punkt ist derselbe: Weisen Sie nicht dieselben Konflikte mit dem Einfügeschlüssel dem vorhandenen Terminalemulatorschlüssel zu.
Ich habe diese Schlussfolgerung zu 100% bewiesen, indem ich meinen Terminal-Einfügeschlüssel auf gesetzt habe Ctrl+Vund jetzt
<C-v>
aufhöre zu arbeiten, aber zu<C-S-v>
funktionieren.Beachten Sie auch, dass das Vim zu empfindlich und seltsam ist. Ich finde heraus, dass ich
i
2 rechte Tasten manuell verwenden muss, damit es in der richtigen Cursorposition funktioniert. Das bedeutet, dass ich auchi
2 rechte Tasten eingeben muss~/.vimrc
. Ihr Fall mag sich unterscheiden, aber der Punkt ist der gleiche. Stellen Sie sicher, dass die Schlüssel + Reihenfolge in ~ / .vimrc 100% mit dem übereinstimmen, was Sie manuell eingeben.quelle