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 mitvd file1 file2
. Es verwendetdiff
, um festzustellen, ob sich die Dateien unterscheiden, und öffnetvimdiff
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
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 nachgit 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
unddiffo!
. - Wenn mit einer geöffneten Datei begonnen wird
File1
können Sie auch:vert diffs File2
verwenden, umFile2
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
unddiffoff!
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.