2009-06-03 5 views
14

Wenn an einer Eingabeaufforderung zu kopieren, ichUndoing diff setzen, wenn Linien zwischen vimdiff Fenster

laufen
vimdiff file1 file2 

ich eine vim Instanz erhalten, die zwei Dateien offene Seite-an-Seite hat. Nehmen wir an, dass der Text in den Dateien sieht wie folgt aus (file1 auf der linken Seite, file2 auf der rechten Seite):

╔═══════╤═══════╗ 
║foo │-------║ 
║bar │bar ║ 
║grue │-------║ 
║~  │~  ║ 
║~  │~  ║ 
╚═══════╧═══════╝ 

Nehmen wir nun an, dass mein Cursor auf dem „f“ von „foo“ ist und dass ich wünschte, Kopieren Sie die erste Zeile von Datei1 in die erste Zeile von Datei2.

Eine Möglichkeit, dies zu tun ist, zu wählen und zerrt (Kopie) die Zeile mit v $ y, und verwenden Sie dann Strg + wl die Cursor über in der ersten Zeile von file2 zu bewegen, und dann geben p, um die kopierte Zeile einzufügen. Wenn ich das tue und ich dann entscheide, dass ich es eigentlich nicht tun wollte, kann ich u drücken, um den Paste-Befehl rückgängig zu machen, den ich in Datei2 ausgeführt habe.

Eine andere Möglichkeit, dies zu tun, ist die Verwendung des Diff-Put-Befehls dp. Wenn ich jedoch nach diesem Schritt entscheide, dass ich es nicht wollte, kann ich es nicht einfach rückgängig machen, indem ich u drücke, weil mein Cursor immer noch in Datei1 ist und der u Befehl die letzte Änderung an file1 rückgängig macht , nicht die letzte Änderung an Datei2. Anstatt also habe ich Strg + w l oder Ctrl verwenden + w w den Cursor auf das Fenster für Datei2 und dann drücken u zu bewegen.

Also meine Frage ist: nachdem ich dp wie oben verwendet habe, gibt es einen einfachen Weg für mich, es rückgängig zu machen, ohne meinen Cursor über das Fenster der anderen Datei zu bewegen?

Antwort

12

Es gibt wirklich keinen Befehl dafür, aber Sie könnten Ihre eigenen zuordnen. Setzen Sie das folgende in Ihren vimrc und verwenden Sie dann du, um diff undos zu tun.

nmap du :wincmd w<cr>:normal u<cr>:wincmd w<cr>
+1

Dies könnte seltsam verhalten, wenn es mehr als zwei Fenster ist. (Nur eine Anmerkung, dennoch eine perfekte Antwort auf die Frage). –

10

Hängt, wie Sie Ihren Workflow geht, aber ich in der Regel do verwenden, um ein diff in meine Datei zu erhalten, anstatt dp, die das diff in den anderen setzt. Auf diese Weise können Sie wie gewohnt u und ctrl + r verwenden.

Da die diff-Navigationsbefehle aus beiden Dateien gleich funktionieren, sollte es gut gehen!

nächste diff: ]c

zurück diff: [c

+0

viel einfachere Lösung +1 – cctan

0

Wenn Dateien zu vergleichen, wie ich vimdiff oder vim -d verwenden.Eine Möglichkeit des Kopierens Änderungen mit vimdiff ist:

]c    - advance to the next block with differences 
[c    - reverse search for the previous block with differences 
do (diff obtain) - bring changes from the other file to the current file 
dp (diff put) - send changes from the current file to the other file 

Dies funktioniert wie:

:diffget the same with do 
:diffput the same with dp 
+0

viel leicht zu lesen –

+0

können Sie meine Antwort abstimmen? Ich brauche bis zu 15 –

Verwandte Themen