Wie kann ich nur dp oder nur die Zeilen, nicht den gesamten Block in Vim diff?

28

Ich verwende derzeit die MacVim (Snapshot 64) -Menüoption "Split Diff by ...".

Die Datei ist Django's my settings.pyvon Version 1.3.1 zu einer neuen Datei von Version 1.4.

Bildschirmfoto

Ich kenne zwei grundlegende Befehle

  1. do um einen Block von der anderen Seite zu "erhalten" (und zu ersetzen).
  2. dp einen Block auf die andere Seite "legen" (und ersetzen).

Diese beiden Befehle schreiben jedoch den gesamten Block, der in MacVim die violetten Hervorhebungen darstellt.

Wenn Sie sich den 2. Block ansehen, sehen Sie, dass in Zeile 2 und 3 nur zwei Wörter vorhanden sind, die sich unterscheiden: mysiteund hobbes3. Ich möchte nur pro Zeile nicht den gesamten Block ersetzen .

Was gibt es also für einen Befehl zum Ersetzen von do dound dppro Zeile im Gegensatz zu einem ganzen Block oder muss ich ihn manuell eingeben?

Bonusfrage : Mir ist aufgefallen, dass ich die violette Markierung verliere, wenn ich einen Block manuell bearbeite. Wie "aktualisiere" ich das Diff erneut, um die Highlights einzuschließen, ohne die Datei erneut zu öffnen?

Bitte versuchen Sie, die Antworten von Vim-general im Gegensatz zu MacVim-specific zu belassen.

hobbes3
quelle

Antworten:

30

Hierfür gibt es verschiedene Möglichkeiten.

  1. Wählen Sie den Zeilenbereich im Zielpuffer aus, den Sie aus dem Quellpuffer abrufen und verwenden möchten :diffget. Sie können beispielsweise einen Linienbereich mit visuell auswählenV und dann eingeben :diffget.
  2. Wählen Sie den Zeilenbereich im Quellpuffer aus, den Sie in den Zielpuffer einfügen und verwenden möchten :diffput. Geben Sie beispielsweise Folgendes ein, um die aktuelle Zeile in den anderen Puffer zu verschieben:.diffput .
  3. Verwenden Sie Ruck und Put. Wählen Sie den Zeilenbereich im Quellpuffer aus, den Sie in den Zielpuffer kopieren möchten, ziehen Sie ihn mit Y, bewegen Sie den Cursor zum Zielpuffer und platzieren Sie ihn mit poder an der gewünschten StelleP der gewünschten Stelle. Löschen Sie dann die nicht gewünschten Zeilen.
  4. Ziehen Sie wie oben vor, aber wählen Sie im Zielpuffer visuell den Bereich der zu ersetzenden Zeilen (nicht unbedingt die gleiche Anzahl von Zeilen) und den Typ aus "0p. Dabei wird das Register 0 (Null) verwendet, das immer den Text des letzten Ruckels enthält.

Um die Anzeige zu "aktualisieren", um die richtige Hervorhebung anzuzeigen, führen Sie :diffupdateoder einfach aus :diffu. Manchmal reicht das nicht aus und Sie müssen den Cursor in das andere Fenster bewegen, um die Aktualisierung abzuschließen.

Weitere Informationen zum Kopieren von Unterschieden finden Sie in

:help copy-diffs
garyjohn
quelle
3

Ich wollte auch eine Zeile zu einem bestimmten Zeitpunkt während eines Diffs ändern. Also habe ich eine einfache Karte erstellt und sie in meine vimrc-Datei eingefügt.

nnoremap <silent> <leader>dp V:diffput<cr>
nnoremap <silent> <leader>dg V:diffget<cr>

Sie könnten do anstelle von dg verwenden, aber ich bin eher daran gewöhnt, "diffget" zu denken, anstatt [o] btain.

Für Ihren Bonus verwende ich nur zweimal eine andere einfache Karte:

nnoremap <silent> <leader>df :call DiffToggle()<CR>

Jetzt schaltet df den Diffmode aus / ein, also schalte ich ihn einfach aus und wieder ein.

Und eine Bonusoption ist das Hinzufügen

nmap <silent> <leader>du :wincmd w<cr>:normal u<cr>:wincmd w<cr>

Auf diese Weise können Sie einen Tippfehler oder eine unerwünschte Änderung in der anderen Datei / im anderen Fenster rückgängig machen.

lucky85dog
quelle