Jeg bruker vim som primærredaktør.
Jeg vil også bruke vim til å diffe filer og endre filene mens du gjør diff for å fikse enkle endringer (i stedet for de fleste diff-teknikker som er en syklus av diff / fix / diff / fix).
I tillegg er det enkle måter å integrere vim i diff-verktøy som brukes av kildekontrollverktøy / nettsteder (Jeg tenker spesifikt på git, men jeg er sikker på at andre mennesker vil være interessert i integrering med andre kildekontrollverktøy / nettsteder).
Kommentarer
Svar
vim har denne funksjonaliteten innebygd (med riktig kommandolinjeflagg ).
vim -d <file1> <file2>
Dette åpner hver fil i en visning og fremhever forskjellene.
Enhver kode som er identisk er folded
unna, slik at du ikke trenger å se på identisk kode eller bla gjennom store biter med identisk kode.
Men det er også et omslagsprogram vimdiff
som påkaller vim riktig med de riktige flaggene.
vimdiff source1.cpp source2.cpp
Hvis du bruker git, kan du sette opp et eksternt diff-verktøy. Så det er enkelt å sette opp vimdiff til å være diff-verktøyet for git.
git config --global diff.tool vimdiff
Når du bruker vimdiff kan du redigere begge sider, og diff-utheving holder tritt for å vise du forskjellene.
Merk: Når du redigerer fra en git diff. Hvis du prøver å redigere arkivlagret versjon av filen, blir endringene dine kastet når du avslutter (git stoler ikke på originalen, så du skiller deg fra en tmp-kopi), men du kan redigere den lokale kopien til ditt hjerte og lagre den over din nåværende versjon.
Noen grunnleggende kommandoer som er nyttige i 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
Andre vim-innstillinger jeg bruker for å jobbe med highliting med vimdiff
if &diff highlight! link DiffText MatchParen endif
Dette slår av utheving på kodebitene som endres. Så linjen som er endret er uthevet slik at jeg kan få øye på endringene, men den faktiske teksten som har endret seg skiller seg ut på linjen (da den ikke er uthevet).
Kommentarer
- Håndterer også opptil 4 buffere, noe som gjør det flott å sammenligne konfigurasjonsfiler
- Du kan også bruke kommandoen
:diffthis
til å starte diff når Vim allerede kjører. - Og: diffoff for å slå den av. Jeg tror en lenke til vim ‘ s dokumentasjon vil være gunstig: vimdoc.sourceforge.net/htmldoc/diff.html
- For meg selv etter
git config --global diff.tool vimdiff
, visergit diff
fremdeles alt som om jeg ikke endrer noe. - prøv
git difftool
Svar
Hvis du er redigere en åpen fil og ønsker å sammenligne den med en annen fil uten å lukke den nåværende:
Åpne den nye filen i delt skjerm:
For vertikal delt:
:vs otherFile
eller horisontal splittelse:
:split otherFile
Bytt markør til annen delt skjerm:
ctrl+w ctrl+w
Påkalle «diff mode» i fil:
:diffthis
Bytt til annen fil og påkall «diff mode»:
:diffthis
For å slå av «diff mode»:
:diffoff
Kommentarer
- For å unngå å bytte mellom n bufferne kan du bruke
:windo diffthis
også - @statox: fungerer også for
diffoff
, så:windo diffthis
og:windo diffoff
til start og stopp diff for to åpne vinduer. Eller forkortet:windo difft
ogdiffo!
. - Hvis du starter med en åpen fil
File1
, kan du også bruke:vert diffs File2
for å åpneFile2
i en vertikal splitt til høyre og diffundere den medFile1
.
Svar
Du kan plassere nedenfor nevnte innstilling i .gitconfig
filen ble funnet i %homepath%
(eller %userprofile%
) -katalogen til den påloggede brukeren:
[diff] tool = vimdiff
Dette gjør det mulig for git bash-verktøyet å begynne å bruke vimdiff også som det eksterne diff-verktøyet.
Svar
Følgende er git-konfigurasjonen min:
https://github.com/tracyone/dotfiles/blob/master/.gitconfig
[core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 [difftool] prompt = 0
Svar
For NeoVim kan du konfigurere ~/.gitconfig
med følgende kommandoer
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\""
Din ~/.gitconfig
skal da se ut som:
[merge] tool = nvim [mergetool] keepBackup = false [mergetool "nvim"] cmd = nvim -d $LOCAL $REMOTE $MERGED -c "$wincmd w" -c "wincmd J"
Se Nvim-dokumentasjon: diff for mer informasjon om hvordan du konfigurerer den til din smak.
Svar
Jeg kan se bare tre sitte bruk for å bruke vim som et verktøy. De er kort beskrevet nedenfor:
-
For git difftool, legg følgende i
~/.gitconfig
:[core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3
-
For å åpne vim som et diff-verktøy for to filer, kan du gjøre følgende:
vimdiff file1.ext file2.ext # for vim nvim -d file1.ext file2.ext # for neovim
-
For å få diff-visning for bufferne som er aktive for øyeblikket, dvs. alle bufferne som har et vindu tildelt på den aktuelle fanen, kan du gjøre følgende:
:windo diffthis " to get diff view :windo diffoff " to remove diff view
For mer informasjon, se :h diff
Kommentarer
- hvis bare en fil er åpen ennå:
:vert diffs File2
for å skille med File2.
Svar
her gjør jeg:
- åpner et vindu med første fil (eller tekstinnhold hvis du limer inn data)
- åpne neste fil / vindu ved hjelp av
:vnew
(for å ha begge vinduer side om side) eller:new
( å ha vinduene øverst og b ottom). hvis du har en bestemt fil å åpne i det andre vinduet, kan du inkludere banen slik::vnew /path/to/secondfile.txt
- bruk F8 for å veksle en tilpasset funksjon som blir diff modus på og av
her er den tilpassede funksjonen som «er i min ~/.vimrc
:
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
Kommentarer
- du kan bruke kommandoen
:diffthis
ogdiffoff!
slik at du ikke ‘ ikke trenger å angi alle diffalternativer selv (f.eks. er cursorbind også satt av diffmode)
Svar
Jeg har adoptert av .vimrc med noen nyttige kommandoer i diff-modus (nedre del). Hvis du redigerer i normal modus, tilbakestilles innstillingen (øvre del). Du kan kopiere den ganske enkelt i .vimrc-filen.
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
Selvfølgelig kan du endre innstillingene mine. Hvis du vil sette en ny kommando på » 0 «, endrer du kommandoen rett etter » Op » f.eks med » za » som skifter mellom folding og utfolding:
nmap <Esc>Op za " 0 0
Vær oppmerksom på den forskjellige bruken av » map » og » nmap » avhengig av nøkkel.
:Gdiff
og:Gvdiff
begge kommandoene lar deg se side om side forskjellen til den nåværende bufferen hvis din nåværende buffer administreres av git. Det hjelper deg også til å løse konflikter i et trevinduoppsett når du har flette konflikter på noen filervd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; }
og jeg påkaller det medvd file1 file2
. Den brukerdiff
for å avgjøre om filene er forskjellige og bare åpnervimdiff
hvis det er slik. Ellers holder jeg meg i skallet. Jeg deaktiverer også syntaksmarkering i Vim fordi jeg synes det er distraherende når jeg skiller meg ut. Fungerer bare med to filer.