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
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
adiffo!
. - 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
adiffoff!
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.
: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í.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.