Ik gebruik vim als mijn primaire editor.
Ik zou ook vim willen gebruiken om bestanden te differen en de bestanden te wijzigen terwijl ik de diff om eenvoudige wijzigingen op te lossen (in plaats van de meeste diff-technieken die een cyclus zijn van diff / fix / diff / fix).
Bovendien zijn er eenvoudige manieren om vim te integreren in diff-tools die worden gebruikt door bronbeheerprogrammas / sites (Ik denk specifiek aan git, maar ik ben er zeker van dat andere mensen geïnteresseerd zouden zijn in integratie met andere tools / sites voor bronbeheer).
Reacties
Answer
vim heeft deze functionaliteit ingebouwd (met de juiste opdrachtregelvlag ).
vim -d <file1> <file2>
Dit opent elk bestand in een weergave en benadrukt de verschillen.
Elke code die identiek is, is folded
weg, zodat u niet naar identieke code hoeft te kijken of door grote brokken identieke code hoeft te scrollen.
Maar er is ook een wrapper-applicatie vimdiff
die vim correct aanroept met de juiste vlaggen.
vimdiff source1.cpp source2.cpp
Als je git gebruikt, kun je een externe diff-tool opzetten. Het is dus gemakkelijk om vimdiff in te stellen als de diff-tool voor git.
git config --global diff.tool vimdiff
Als je vimdiff gebruikt, kun je beide zijden bewerken en diff-accentuering houdt gelijke tred om te tonen jij de verschillen.
Opmerking: bij het bewerken vanuit een git diff. Als je de in de repository opgeslagen versie van het bestand probeert te bewerken, worden je wijzigingen weggegooid wanneer je afsluit (git vertrouwt je niet met het origineel, dus je onderscheidt zich tegen een tmp-kopie) maar je kunt de lokale kopie naar hartenlust bewerken en sla het op over je huidige versie.
Enkele basiscommandos die handig zijn 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-instellingen die ik gebruik om met highliting met vimdiff te werken
if &diff highlight! link DiffText MatchParen endif
Dit schakelt de accentuering van de stukjes code die zijn gewijzigd uit. Dus de regel die is gewijzigd, wordt gemarkeerd zodat ik de wijzigingen kan zien, maar de daadwerkelijke tekst die is gewijzigd, valt op de regel op (omdat deze niet is gemarkeerd).
Opmerkingen
- Verwerkt ook tot 4 buffers, waardoor het ideaal is voor het vergelijken van configuratiebestanden.
- Je kunt ook het
:diffthis
commando gebruiken om een diff als Vim al draait. - En: diffoff om het uit te schakelen. Ik denk dat een link naar de documentatie van vim ‘ s nuttig zou zijn: vimdoc.sourceforge.net/htmldoc/diff.html
- Voor mij, zelfs na
git config --global diff.tool vimdiff
, laatgit diff
nog steeds alles zien alsof ik niets verander. - probeer
git difftool
Answer
Als je dat bent een geopend bestand bewerken en het met een ander bestand willen vergelijken zonder het huidige te sluiten:
Open het nieuwe bestand in een gesplitst scherm:
Voor verticale splitsing:
:vs otherFile
of horizontale splitsing:
:split otherFile
Cursors wisselen naar een ander gesplitst scherm:
ctrl+w ctrl+w
Roep “diff mode” op in bestand:
:diffthis
Schakel over naar een ander bestand en roep “diff mode” op:
:diffthis
Om “diff mode” uit te schakelen:
:diffoff
Reacties
- Om te voorkomen dat u tussen n de buffers kun je
:windo diffthis
ook gebruiken - @statox: werkt ook voor
diffoff
, dus:windo diffthis
en:windo diffoff
om start en stop diff voor twee geopende vensters. Of afgekort:windo difft
endiffo!
. - Als u begint met één geopend bestand
File1
, je kunt ook:vert diffs File2
gebruiken omFile2
in een verticale splitsing aan de rechterkant te openen en het te verschuiven metFile1
.
Antwoord
U kunt onderstaande instelling plaatsen in .gitconfig
bestand gevonden in %homepath%
(of %userprofile%
) directory van de momenteel aangemelde gebruiker:
[diff] tool = vimdiff
Hierdoor kan de git bash tool ook vimdiff gaan gebruiken als de externe diff tool.
Answer
Hieronder volgt mijn git-configuratie:
https://github.com/tracyone/dotfiles/blob/master/.gitconfig
[core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 [difftool] prompt = 0
Antwoord
Voor NeoVim kunt u uw ~/.gitconfig
met de volgende commandos
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\""
Uw ~/.gitconfig
zou er dan als volgt uit moeten zien:
[merge] tool = nvim [mergetool] keepBackup = false [mergetool "nvim"] cmd = nvim -d $LOCAL $REMOTE $MERGED -c "$wincmd w" -c "wincmd J"
Raadpleeg Nvim-documentatie: diff voor meer informatie over hoe u het naar wens kunt configureren.
Answer
Ik zie er maar drie zitten gebruiken om vim als een difftool te gebruiken. Ze worden hieronder kort beschreven:
-
Voor git difftool, plaats het volgende in uw
~/.gitconfig
:[core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3
-
Om vim te openen als een diff-tool voor twee bestanden, kun je het volgende doen:
vimdiff file1.ext file2.ext # for vim nvim -d file1.ext file2.ext # for neovim
-
Om een verschilweergave te krijgen voor de buffers die momenteel actief zijn, dwz alle buffers waaraan een venster is toegewezen in de momenteel actieve tabpagina, kunt u het volgende doen:
:windo diffthis " to get diff view :windo diffoff " to remove diff view
Voor meer informatie, zie :h diff
Reacties
- als er nog maar één bestand open is:
:vert diffs File2
om te verschillen met Bestand2.
Antwoord
hier is wat ik doe:
- open een venster met het eerste bestand (of tekstinhoud als je plakt data)
- open volgend bestand / venster met
:vnew
(om beide vensters naast elkaar te hebben) of:new
( om de ramen boven en b ottom). als je een specifiek bestand wilt openen in het tweede venster, kun je het pad als volgt toevoegen::vnew /path/to/secondfile.txt
- gebruik F8 om een aangepaste functie in te schakelen die diff verandert modus aan en uit
hier is de aangepaste functie die “in mijn ~/.vimrc
staat:
nmap <silent> <F8> :call ToggleDiff()<CR> imap <silent> <F8> <C-O>:call ToggleDiff()<CR> function ToggleDiff () if (&diff) set nodiff noscrollbind else " enable diff options in both windows; balance the sizes, too wincmd = set diff scrollbind nowrap number wincmd w set diff scrollbind nowrap number wincmd w endif endfunction
Reacties
- je kunt het commando
:diffthis
endiffoff!
dus je hoeft niet ‘ alle diff-opties zelf in te stellen (bijv. cursorbind wordt ook ingesteld door diffmode)
Answer
Ik heb door .vimrc overgenomen met enkele handige commandos in diff-modus (onderste deel). Als u in de normale modus bewerkt, wordt de instelling gereset (bovenste gedeelte). U kunt het eenvoudig in uw .vimrc-bestand kopiëren.
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
Natuurlijk kunt u mijn instellingen wijzigen. Als je een ander commando wilt plaatsen op ” 0 “, verander het commando dan direct na ” Op ” bijv met ” za ” die schakelt tussen vouwen en uitvouwen:
nmap <Esc>Op za " 0 0
Let op het verschillende gebruik van ” map ” en ” nmap ” afhankelijk van de sleutel.
:Gdiff
en:Gvdiff
toe. Beide commandos laten je de diff van de huidige buffer naast elkaar zien als je huidige buffer wordt beheerd door git. Het helpt je ook om conflicten op te lossen in een indeling met drie vensters wanneer je samenvoegconflicten hebt met sommige bestanden.vd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; }
en ik roep het metvd file1 file2
. Het gebruiktdiff
om te bepalen of de bestanden verschillen en opent alleenvimdiff
als dat zo is. Anders blijf ik in de schaal. Ik schakel ook syntaxisaccentuering uit in Vim omdat ik het storend vind bij het differen. Werkt alleen met twee bestanden.