Wie verwende ich vim als Diff-Tool?

Ich verwende vim als primären Editor.

Ich möchte auch vim verwenden, um Dateien zu unterscheiden und die Dateien während des Vorgangs zu ändern diff, um einfache Änderungen zu korrigieren (anstelle der meisten diff-Techniken, bei denen es sich um einen Zyklus aus diff / fix / diff / fix handelt).

Darüber hinaus gibt es einfache Möglichkeiten, vim in diff-Tools zu integrieren, die von Tools / Sites zur Quellcodeverwaltung verwendet werden (Ich denke speziell an Git, aber ich bin sicher, dass andere Leute an der Integration mit anderen Tools / Sites zur Quellcodeverwaltung interessiert sind.)

Kommentare

  • Sie sollten vim-fugitive ausprobieren. Es werden die Befehle :Gdiff und :Gvdiff hinzugefügt. Mit beiden Befehlen können Sie den Diff des aktuellen Puffers nebeneinander anzeigen, wenn Ihr aktueller Puffer wird von git verwaltet. Außerdem können Sie Konflikte in einem Layout mit drei Fenstern lösen, wenn bei einigen Dateien Zusammenführungskonflikte auftreten.
  • Ich habe diese einfache Funktion in meinem bashrc vd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; } und rufe auf es mit vd file1 file2. Es verwendet diff, um festzustellen, ob sich die Dateien unterscheiden, und öffnet vimdiff nur, wenn dies der Fall ist. Ansonsten bleibe ich in der Shell. Ich deaktiviere auch die Syntaxhervorhebung in Vim, weil ich sie beim Unterschieden als störend empfinde. Funktioniert nur mit zwei Dateien.

Antwort

vim verfügt über diese integrierte Funktionalität (mit dem richtigen Befehlszeilenflag) ).

vim -d <file1> <file2> 

Dies öffnet jede Datei in einer Ansicht und hebt die Unterschiede hervor.
Jeder identische Code ist folded entfernt, sodass Sie nicht auf identischen Code schauen oder durch große Teile identischen Codes scrollen müssen.

Es gibt aber auch eine Wrapper-Anwendung vimdiff, die vim mit den richtigen Flags korrekt aufruft.

vimdiff source1.cpp source2.cpp 

Wenn Sie git verwenden, können Sie ein externes Diff-Tool einrichten. So ist es einfach, vimdiff als Diff-Tool für Git einzurichten.

git config --global diff.tool vimdiff 

Wenn Sie vimdiff verwenden, können Sie beide Seiten bearbeiten und die Diff-Hervorhebung hält Schritt, um angezeigt zu werden Sie die Unterschiede.

Hinweis: Beim Bearbeiten von einem Git-Diff. Wenn Sie versuchen, die im Repository gespeicherte Version der Datei zu bearbeiten, werden Ihre Änderungen beim Beenden verworfen (git vertraut Ihnen nicht mit dem Original, sodass Sie sich von einer tmp-Kopie unterscheiden), aber Sie können die lokale Kopie nach Herzenslust und bearbeiten Speichern Sie es über Ihrer aktuellen Version.

Einige grundlegende Befehle, die in vimdiff

dp diffput: puts changes under the cursor into the other file making them identical (thus removing the diff). do diffget: (o => obtain). The change under the cursor is replaced by the content of the other file making them identical. ]c Jump to the next diff [c Jump to the previous diff 

Andere vim-Einstellungen, mit denen ich mit vimdiff mit Highliting arbeite

if &diff highlight! link DiffText MatchParen endif 

Dadurch wird die Hervorhebung der geänderten Codebits deaktiviert. Die geänderte Zeile wird also hervorgehoben, damit ich die Änderungen erkennen kann, aber der tatsächlich geänderte Text fällt in der Zeile auf (da er nicht hervorgehoben ist).

Kommentare

  • Verarbeitet auch bis zu 4 Puffer und eignet sich daher hervorragend zum Vergleichen von Konfigurationsdateien.
  • Sie können auch den Befehl :diffthis verwenden, um a zu initiieren diff, wenn Vim bereits ausgeführt wird.
  • Und: diffoff, um es auszuschalten. Ich denke, ein Link zur Dokumentation von vim ‚ wäre von Vorteil: vimdoc.sourceforge.net/htmldoc/diff.html
  • Für mich zeigt git diff auch nach git config --global diff.tool vimdiff immer noch alles so, als ob ich nichts ändere.
  • versuchen Sie git difftool

Antwort

Wenn ja Bearbeiten einer geöffneten Datei und Vergleichen mit einer anderen Datei, ohne die aktuelle zu schließen:

Öffnen Sie die neue Datei im geteilten Bildschirm:

Für vertikales Teilen:

:vs otherFile 

oder horizontale Aufteilung:

:split otherFile 

Schalten Sie die Cursor auf einen anderen geteilten Bildschirm:

ctrl+w ctrl+w 

Rufen Sie den „Diff-Modus“ in der Datei auf:

:diffthis 

Wechseln Sie zu einer anderen Datei und rufen Sie den „Diff-Modus“ auf:

:diffthis 

So deaktivieren Sie den „Diff-Modus“:

:diffoff 

Kommentare

  • Um einen Wechsel zwischen den beiden zu vermeiden In den Puffern können Sie auch :windo diffthis
  • @statox verwenden: funktioniert auch für diffoff, also :windo diffthis und :windo diffoff, um zu starten und diff für zwei geöffnete Fenster zu stoppen. Oder abgekürzt :windo difft und diffo!.
  • Wenn mit einer geöffneten Datei begonnen wird File1 können Sie auch :vert diffs File2 verwenden, um File2 in einer vertikalen Aufteilung rechts zu öffnen und mit .

Antwort

Sie können die unten angegebene Einstellung in .gitconfig einfügen Datei gefunden im Verzeichnis %homepath% (oder %userprofile%) des aktuell angemeldeten Benutzers:

[diff] tool = vimdiff 

Dadurch kann das Git-Bash-Tool auch vimdiff als externes Diff-Tool verwenden.

Antwort

Es folgt meine Git-Konfiguration:

https://github.com/tracyone/dotfiles/blob/master/.gitconfig

[core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 [difftool] prompt = 0 

Antwort

Für NeoVim können Sie Ihre ~/.gitconfig mit den folgenden Befehlen

git config --global merge.tool nvim git config --global mergetool.keepBackup false git config --global mergetool.nvim.cmd $"nvim -d $LOCAL $REMOTE $MERGED -c \"$wincmd w\" -c \"wincmd J\"" 

Ihre ~/.gitconfig sollte dann folgendermaßen aussehen:

[merge] tool = nvim [mergetool] keepBackup = false [mergetool "nvim"] cmd = nvim -d $LOCAL $REMOTE $MERGED -c "$wincmd w" -c "wincmd J" 

Weitere Informationen zum Konfigurieren nach Ihren Wünschen finden Sie unter Nvim-Dokumentation: diff .

Antwort

Ich kann nur drei sitzen sehen um vim als difftool zu verwenden. Sie werden im Folgenden kurz beschrieben:

  • Geben Sie für git difftool Folgendes in Ihr ~/.gitconfig ein:

    [core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 
  • Um vim als Diff-Tool für zwei Dateien zu öffnen, haben Sie folgende Möglichkeiten:

    vimdiff file1.ext file2.ext # for vim nvim -d file1.ext file2.ext # for neovim 
  • Um eine Diff-Ansicht für die aktuell aktiven Puffer zu erhalten, dh für alle Puffer, denen auf der aktuell aktiven Registerkarte ein Fenster zugewiesen ist, können Sie Folgendes tun:

    :windo diffthis " to get diff view :windo diffoff " to remove diff view 

Weitere Informationen finden Sie unter :h diff

Kommentare

  • wenn nur eine Datei noch geöffnet ist: :vert diffs File2, um sich von File2 zu unterscheiden.

Antwort

Ich mache Folgendes:

  • öffne ein Fenster mit der ersten Datei (oder Textinhalt, wenn Sie einfügen) Daten)
  • Öffnen Sie die nächste Datei / das nächste Fenster mit :vnew (um beide Fenster nebeneinander zu haben) oder :new ( die Fenster oben haben und b ottom). Wenn Sie eine bestimmte Datei im zweiten Fenster öffnen möchten, können Sie den folgenden Pfad einfügen: :vnew /path/to/secondfile.txt
  • Verwenden Sie F8, um eine benutzerdefinierte Funktion umzuschalten, die diff dreht Modus ein und aus

Hier ist die benutzerdefinierte Funktion, die in meinem ~/.vimrc:

Kommentare

  • Sie können den Befehl :diffthis und diffoff! damit Sie nicht ‚ alle Diff-Optionen selbst einstellen müssen (z. B. wird Cursorbind auch im Diff-Modus festgelegt)

Antwort

Ich habe von .vimrc einige nützliche Befehle im Diff-Modus (unterer Teil) übernommen. Wenn Sie im normalen Modus bearbeiten, werden die Einstellungen zurückgesetzt (oberer Teil). Sie können es einfach in Ihre .vimrc-Datei kopieren.

nmap <silent> <F2> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR> inoremap <Esc>Oq 1 inoremap <Esc>Or 2 inoremap <Esc>Os 3 inoremap <Esc>Ot 4 inoremap <Esc>Ou 5 inoremap <Esc>Ov 6 inoremap <Esc>Ow 7 inoremap <Esc>Ox 8 inoremap <Esc>Oy 9 inoremap <Esc>Op 0 inoremap <Esc>On . inoremap <Esc>OQ / inoremap <Esc>OR * inoremap <Esc>Ol + inoremap <Esc>OS - inoremap <Esc>OM <Enter> nnoremap <Esc>OQ B " / nnoremap <Esc>OR E " * if &diff map <Esc>Oq zc " 1 close a fold map <Esc>Or <down> " 2 cursor down map <Esc>Os ]c " 3 next diff nmap <Esc>Ot <left> " 4 curosor left nnoremap <Esc>Ou <c-w>w " 5 jump to next file map <Esc>Ov <right> " 6 cursor right map <Esc>Ow zo " 7 open a fold map <Esc>Ox <up> " 8 curosor right map <Esc>Oy [c " 9 prefious diff map <Esc>Op 0 " 0 0 nmap <Esc>On . " . . nmap <Esc>OQ B " / back one word nmap <Esc>OR E " * end of word nmap <Esc>Ol dp " - diffput nmap <Esc>OS do " + diffget nmap <Esc>OM :diffupdate " Enter endif 

Natürlich können Sie meine Einstellungen ändern. Wenn Sie einen anderen Befehl auf “ 0 “ setzen möchten, ändern Sie den Befehl direkt nach “ Op “ z mit “ za „, das zwischen Falten und Entfalten umschaltet:

 nmap <Esc>Op za " 0 0 

Bitte beachten Sie die unterschiedliche Verwendung von “ map “ und “ nmap “ abhängig vom Schlüssel.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.