Kuinka voin käyttää VIM: ää diff-työkaluna?

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.

  • Minulla on tämä yksinkertainen toiminto bashrc 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älkeenkin git 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

    • Välttääksesi vaihtamista n puskurit, joita voit käyttää :windo diffthis myös
    • @statox: toimii myös diffoff, joten :windo diffthis ja :windo diffoff käynnistää ja lopettaa ero kahdelle avoimelle ikkunalle. Tai lyhennetty :windo difft ja diffo!.
    • Jos aloitat yhdellä avoimella tiedostolla File1, voit myös käyttää :vert diffs File2 avataksesi File2 oikealla olevassa pystysuorassa jaossa diff. File1.

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

    Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *