Hvordan bruker jeg vim som et diff-verktøy?

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

  • du bør prøve vim-fugitive det legger til kommandoene :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 filer
  • Jeg har denne enkle funksjonen i bashrc vd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; } og jeg påkaller det med vd file1 file2. Den bruker diff for å avgjøre om filene er forskjellige og bare åpner vimdiff 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.

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, viser git 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 og diffo!.
  • Hvis du starter med en åpen fil File1, kan du også bruke :vert diffs File2 for å åpne File2 i en vertikal splitt til høyre og diffundere den med File1.

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 og diffoff! 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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *