Jak mohu použít vim jako nástroj pro porovnání?

Jako primární editor používám vim.

Chtěl bych také použít vim k rozdílu souborů a úpravám souborů při provádění diff opraví snadné změny (spíše než většina technik diff, které jsou cyklem diff / fix / diff / fix).

Navíc existují jednoduché způsoby, jak integrovat vim do nástrojů diff používaných nástroji / weby pro řízení zdrojů (Konkrétně mám na mysli git, ale jsem si jist, že by ostatní lidé měli zájem o integraci s jinými nástroji / weby pro řízení zdrojů.)

Komentáře

  • měli byste zkusit vim-fugitive přidá příkazy :Gdiff a :Gvdiff oba příkazy vám umožní vidět vedle sebe rozdíl aktuální vyrovnávací paměti, pokud váš aktuální buffer je řízen git. Také vám pomůže vyřešit konflikty v rozvržení tří oken, když máte u některých souborů konflikty sloučení.
  • Mám tuto jednoduchou funkci v mém bashrc vd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; } a vyvolávám pomocí vd file1 file2. Používá diff k určení, zda se soubory liší, a otevírá vimdiff, pouze pokud je to tak. Jinak zůstanu v ulitě. Ve Vimu také deaktivuji zvýrazňování syntaxe, protože mi při rozptylování připadá rušivé. Funguje pouze se dvěma soubory.

Odpověď

vim má tuto funkci zabudovanou (se správným příznakem příkazového řádku) ).

vim -d <file1> <file2> 

Tím se otevře každý soubor v zobrazení a zvýrazní se rozdíly.
Jakýkoli identický kód je folded pryč, takže se nemusíte dívat na identický kód nebo procházet obrovskými kusy identického kódu.

Existuje ale také souhrnná aplikace vimdiff, která správně vyvolá vim se správnými příznaky.

vimdiff source1.cpp source2.cpp 

Pokud používáte git, můžete nastavit externí nástroj pro porovnání. Je tedy snadné nastavit vimdiff jako nástroj diff pro git.

git config --global diff.tool vimdiff 

Pokud používáte vimdiff, můžete upravit obě strany a zvýraznění rozdílu udržuje tempo zobrazení ty rozdíly.

Poznámka: Při úpravách z git diff. Pokud se pokusíte upravit verzi souboru uloženou v úložišti, vaše změny budou při ukončení zahozeny (git vám nedůvěřuje s originálem, takže se šíříte proti kopii tmp), ale můžete upravit místní kopii do svého obsahu srdce a uložte si ji přes aktuální verzi.

Některé základní příkazy, které jsou užitečné v 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 

Další nastavení vim, které používám pro práci s highliting s vimdiff

if &diff highlight! link DiffText MatchParen endif 

Tím se vypne zvýrazňování bitů kódu, které jsou změněny. Řádek, který je změněn, je tedy zvýrazněn, takže mohu změny pozorovat, ale skutečný text, který se změnil, na řádku vyniká (protože není zvýrazněn).

Komentáře

  • Také zpracovává až 4 vyrovnávací paměti, což je skvělé pro porovnání konfiguračních souborů
  • Můžete také použít příkaz :diffthis k zahájení diff, když je Vim již spuštěn.
  • And: diffoff pro jeho vypnutí. Myslím, že by byl přínosný odkaz na dokumentaci vim ‚: vimdoc.sourceforge.net/htmldoc/diff.html
  • Pro mě i po git config --global diff.tool vimdiff git diff stále zobrazuje vše, jako kdybych nic nezměnil.
  • vyzkoušejte git difftool

odpověď

pokud jste úpravy otevřeného souboru a chcete jej porovnat s jiným souborem bez zavření aktuálního:

Otevřete nový soubor na rozdělené obrazovce:

Pro vertikální rozdělení:

:vs otherFile 

nebo horizontální rozdělení:

:split otherFile 

Přepnout kurzory na jinou rozdělenou obrazovku:

ctrl+w ctrl+w 

Vyvolat „režim rozdílu“ v souboru:

:diffthis 

Přepnout na jiný soubor a vyvolat „režim rozdílu“:

:diffthis 

Vypnutí „rozdílového režimu“:

:diffoff 

Komentáře

  • Aby se zabránilo přepínání mezi dvěma n vyrovnávací paměti, které můžete použít :windo diffthis také
  • @statox: funguje také pro diffoff, takže :windo diffthis a :windo diffoff pro spuštění a zastavení rozdílu u dvou otevřených oken. Nebo zkrácené :windo difft a diffo!.
  • pokud začíná jedním otevřeným souborem File1, můžete také použít :vert diffs File2 k otevření File2 ve svislém rozdělení napravo a jeho rozdělení pomocí File1.

Odpověď

Níže uvedené nastavení můžete umístit do .gitconfig soubor nalezený v %homepath% (nebo %userprofile%) adresáři aktuálně přihlášeného uživatele:

[diff] tool = vimdiff 

Tím umožníte, aby nástroj git bash začal používat vimdiff také jako externí nástroj pro porovnání.

Odpověď

Následuje můj git config:

https://github.com/tracyone/dotfiles/blob/master/.gitconfig

[core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 [difftool] prompt = 0 

Odpověď

U NeoVim můžete nastavit ~/.gitconfig s následujícími příkazy

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\"" 

Váš ~/.gitconfig by pak měl vypadat takto:

[merge] tool = nvim [mergetool] keepBackup = false [mergetool "nvim"] cmd = nvim -d $LOCAL $REMOTE $MERGED -c "$wincmd w" -c "wincmd J" 

Další informace o tom, jak si jej nakonfigurovat podle svých představ, najdete v dokumentaci Nvim: diff .

Odpověď

Vidím jen tři sezení používat Vim jako difftool. Jsou stručně popsány níže:

  • V případě git difftool vložte do svého ~/.gitconfig:

    [core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 
  • Chcete-li otevřít vim jako nástroj diff pro dva soubory, můžete provést následující:

    vimdiff file1.ext file2.ext # for vim nvim -d file1.ext file2.ext # for neovim 
  • Chcete-li získat rozdílné zobrazení aktuálně aktivních vyrovnávacích pamětí, tj. všech vyrovnávacích pamětí, jimž je na aktuálně aktivní záložce přiřazeno okno, můžete provést následující:

    :windo diffthis " to get diff view :windo diffoff " to remove diff view 

Další informace naleznete v části :h diff

Komentáře

  • pokud je dosud otevřen pouze jeden soubor: :vert diffs File2 k porovnání s File2.

Odpovědět

tady je to, co dělám:

  • otevřít okno s prvním souborem (nebo textovým obsahem, pokud jej vkládáte) data)
  • otevřít další soubor / okno pomocí :vnew (aby byla obě okna vedle sebe) nebo :new ( mít okna nahoře ab ottom). pokud máte ve druhém okně konkrétní soubor, který chcete otevřít, můžete zahrnout cestu takto: :vnew /path/to/secondfile.txt
  • pomocí klávesy F8 přepnete vlastní funkci, která změní diff režim zapnutí a vypnutí

zde je vlastní funkce, která je v mém ~/.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 

Komentáře

  • můžete použít příkaz :diffthis a diffoff! takže nemusíte ‚ nastavovat všechny možnosti rozdílu sami (např. cursorbind nastavuje také diffmode)

Odpověď

Přijal jsem .vimrc s některými užitečnými příkazy v módu diff (spodní část). Pokud provádíte úpravy v normálním režimu, nastavení se resetuje (horní část). Můžete jej jednoduše zkopírovat do souboru .vimrc.

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 

Moje nastavení můžete samozřejmě změnit. Pokud chcete na “ 0 “ vložit další příkaz, změňte příkaz hned po “ Op “ např s “ za „, které přepíná mezi složením a rozložením:

 nmap <Esc>Op za " 0 0 

Uvědomte si prosím různé použití “ map “ a “ nmap “ v závislosti na klíči.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *