Käytän vimiä ensisijaisena editorina.
Haluan myös käyttää vimiä tiedostojen diffiointiin ja tiedostojen muokkaamiseen samalla kun diff korjaamaan helpot muutokset (useimpien diff-tekniikoiden sijaan, jotka ovat jakso diff / fix / diff / fix).
Lisäksi on olemassa helppoja tapoja integroida vim lähdekontrollityökalujen / sivustojen käyttämiin diff-työkaluihin (Ajattelen erityisesti git-sovellusta, mutta olen varma, että muutkin ihmiset haluavat olla integroituneita muihin lähteenhallintatyökaluihin / -sivustoihin.) Kokeile vim-fugitive-komentoa. Komennot :Gdiff
ja :Gvdiff
lisäävät molemmat komennot, jolloin näet nykyisen puskurin vierekkäiset erot, jos nykyistä puskuriasi hallinnoi git. Se auttaa sinua myös ratkaisemaan ristiriidat kolmen ikkunan asettelussa, kun joissakin tiedostoissa on yhdistetty ristiriitoja.
vd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; }
-sivulla se valitsemalla vd file1 file2
. Se käyttää diff
määrittääkseen, poikkeavatko tiedostot, ja avaa vimdiff
vain, jos näin on. Muuten pysyn kuoressa. Poistan myös syntaksikorostuksen käytöstä Vimissä, koska mielestäni se häiritsee diffoimisessa. Toimii vain kahden tiedoston kanssa. Answer
vimillä on sisäänrakennettu tämä toiminto (oikealla komentorivilipulla) ).
vim -d <file1> <file2>
Tämä avaa kaikki tiedostot näkymässä ja korostaa erot.
Kaikki identtiset koodit ovat folded
pois, joten sinun ei tarvitse katsoa identtistä koodia tai selata valtavia paloja identtistä koodia.
Mutta on myös käärimissovellus vimdiff
, joka käynnistää vimin oikein oikeilla lipuilla.
vimdiff source1.cpp source2.cpp
Jos käytät git-ohjelmaa, voit määrittää ulkoisen diff-työkalun. Joten vimdiff on helppo asettaa olemaan diff-työkalu gitille.
git config --global diff.tool vimdiff
Kun käytät vimdiffiä, voit muokata kumpaakin sivua ja diff-korostus pysyy vauhdissa. sinulle erot.
Huomaa: Kun muokkaat git-diff. Jos yrität muokata tiedoston arkistoon tallennettua versiota, muutokset hylätään, kun poistut (git ei luota sinuun alkuperäistä, joten eroat tmp-kopiota vastaan), mutta voit muokata paikallista kopiota sydämesi sisältöön ja tallenna se nykyiseen versioon.
Jotkut peruskomennot, joista on hyötyä 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
Muut vim-asetukset, joita käytän työskennellessäni korostamisen kanssa vimdiffin kanssa
if &diff highlight! link DiffText MatchParen endif
Tämä poistaa korostuksen muutetuista koodibiteistä. Joten muutettu rivi on korostettu, jotta voin havaita muutokset, mutta varsinainen muuttunut teksti erottuu riviltä (koska sitä ei ole korostettu).
Kommentit
- Käsittelee myös enintään 4 puskuria, mikä tekee siitä erinomaisen kokoonpanotiedostojen vertailussa.
- Voit myös käynnistää komennon
:diffthis
diff, kun Vim on jo käynnissä. - Ja: diffoff sen sammuttamiseksi. Mielestäni linkki vim ’ -dokumentaatioon olisi hyödyllistä: vimdoc.sourceforge.net/htmldoc/diff.html
- Minulle
git config --global diff.tool vimdiff
jälkeenkingit diff
näyttää edelleen kaiken, kuten jos en muuta mitään. - kokeile
git difftool
Vastaa
Jos olet muokkaamalla avointa tiedostoa ja haluat verrata sitä toiseen tiedostoon sulkematta nykyistä:
Avaa uusi tiedosto jaetussa näytössä:
Pystysuuntainen jako:
:vs otherFile
tai vaakasuora jako:
:split otherFile
Vaihda kohdistimet eri jaettuun näyttöön:
ctrl+w ctrl+w
Kutsu ”diff mode” tiedostoon:
:diffthis
Vaihda toiseen tiedostoon ja kutsu ”diff mode”:
:diffthis
”diff-tilan” poistaminen käytöstä:
:diffoff
kommentit
vastaus
Voit sijoittaa alla mainitun asetuksen kohtaan .gitconfig
tiedosto, joka löytyy tällä hetkellä kirjautuneen käyttäjän hakemistosta %homepath%
(tai %userprofile%
):
[diff] tool = vimdiff
Tämän avulla git bash -työkalu voi aloittaa vimdiffin käytön myös ulkoisena diff-työkaluna.
Vastaa
Seuraava on git-määritykseni:
https://github.com/tracyone/dotfiles/blob/master/.gitconfig
[core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 [difftool] prompt = 0
Vastaus
NeoVim-sovelluksessa voit määrittää ~/.gitconfig
seuraavilla komennoilla
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\""
~/.gitconfig
pitäisi näyttää seuraavalta:
[merge] tool = nvim [mergetool] keepBackup = false [mergetool "nvim"] cmd = nvim -d $LOCAL $REMOTE $MERGED -c "$wincmd w" -c "wincmd J"
Katso lisätietoja siitä, miten se konfiguroidaan mieleisekseen, katso Nvim-ohjeet: diff .
Vastaa
Näen vain kolme istumista vimiä difftoolina. Niitä kuvataan lyhyesti alla:
-
Lisää git difftoolille seuraava
~/.gitconfig
:[core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3
-
Voit avata vim-tiedoston diff-työkaluna kahdelle tiedostolle seuraavasti:
vimdiff file1.ext file2.ext # for vim nvim -d file1.ext file2.ext # for neovim
-
Saadaksesi diff-näkymän aktiivisille puskureille, ts. kaikille puskureille, joille on määritetty ikkuna tällä hetkellä aktiivisella välilehdellä, voit tehdä seuraavaa:
:windo diffthis " to get diff view :windo diffoff " to remove diff view
Lisätietoja on kohdassa :h diff
Kommentit
- jos vain yksi tiedosto on vielä auki:
:vert diffs File2
eroamaan File2: lla.
Vastaa
tässä mitä teen:
- avaa ikkuna, jossa on ensimmäinen tiedosto (tai tekstisisältö, jos liität uudelleen) data)
- avaa seuraava tiedosto / ikkuna käyttämällä
:vnew
(jos molemmat ikkunat ovat vierekkäin) tai:new
( jotta ikkunat ovat ylhäällä ja b ottomiin). Jos sinulla on tietty tiedosto avattavaksi toisessa ikkunassa, voit sisällyttää polun seuraavasti::vnew /path/to/secondfile.txt
- käytä F8-näppäintä vaihtaaksesi mukautetun toiminnon, joka muuttaa diff tila päällä ja pois päältä
tässä on mukautettu toiminto, joka on ~/.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
Kommentit
- voit käyttää komentoja
:diffthis
jadiffoff!
joten sinun
ei tarvitse asettaa kaikkia diff-asetuksia itse (esim. myös kurssimuoto on asetettu diffmode-toiminnolla)
Vastaa
Olen hyväksynyt .vimrc: llä joitain hyödyllisiä komentoja diff-tilassa (alaosa). Jos muokkaat normaalitilassa, asetukset nollataan (yläosa). Voit kopioida sen yksinkertaisesti .vimrc-tiedostoon.
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
Voit tietysti muuttaa asetuksiani. Jos haluat laittaa toisen komennon kohtaan ” 0 ”, vaihda komento heti ” Op ” esim ” za ”, joka vaihtaa taittamisen ja avautumisen välillä:
nmap <Esc>Op za " 0 0
Ole tietoinen ” -kartan ” ja ” nmap ” riippuen avaimesta.
:windo diffthis
myösdiffoff
, joten:windo diffthis
ja:windo diffoff
käynnistää ja lopettaa ero kahdelle avoimelle ikkunalle. Tai lyhennetty:windo difft
jadiffo!
.File1
, voit myös käyttää:vert diffs File2
avataksesiFile2
oikealla olevassa pystysuorassa jaossa diff.File1
.