Uso vim come editor principale.
Vorrei anche usare vim per diff file e modificare i file mentre eseguo il diff per correggere semplici modifiche (piuttosto che la maggior parte delle tecniche diff che sono un ciclo di diff / fix / diff / fix).
Inoltre ci sono modi semplici per integrare vim negli strumenti diff usati dagli strumenti / siti di controllo del codice (Sto pensando specificatamente a git ma sono sicuro che altre persone sarebbero interessate allintegrazione con altri strumenti / siti di controllo del codice sorgente).
Commenti
Risposta
vim ha questa funzionalità incorporata (con il flag della riga di comando corretto ).
vim -d <file1> <file2>
Questo apre ogni file in una vista ed evidenzia le differenze.
Qualsiasi codice identico è folded
in modo da non dover guardare codice identico o scorrere enormi blocchi di codice identico.
Ma esiste anche unapplicazione wrapper vimdiff
che richiama correttamente vim con i flag corretti.
vimdiff source1.cpp source2.cpp
Se stai usando git puoi configurare uno strumento di diff esterno. Quindi è facile impostare vimdiff come lo strumento diff per git.
git config --global diff.tool vimdiff
Quando si utilizza vimdiff puoi modificare entrambi i lati e levidenziazione delle differenze continua a mostrare tu le differenze.
Nota: quando si modifica da un diff. Se provi a modificare la versione del file memorizzata nel repository, le tue modifiche verranno scartate quando esci (git non si fida di te con loriginale quindi sei diverso da una copia tmp) ma puoi modificare la copia locale nel contenuto del tuo cuore e salvarlo sulla versione corrente.
Alcuni comandi di base utili in 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
Altre impostazioni di vim che uso per lavorare con levidenziazione con vimdiff
if &diff highlight! link DiffText MatchParen endif
Questo disattiva levidenziazione sui bit di codice che vengono modificati. Quindi la riga che è stata modificata è evidenziata in modo da poter individuare le modifiche, ma il testo effettivo che è cambiato risalta sulla riga (poiché non è evidenziato).
Commenti
- Gestisce anche fino a 4 buffer, rendendolo ottimo per confrontare i file di configurazione
- Puoi anche utilizzare il comando
:diffthis
per avviare un diff quando Vim è già in esecuzione. - E: diffoff per disattivarlo. Penso che un link alla documentazione di vim ‘ s sarebbe utile: vimdoc.sourceforge.net/htmldoc/diff.html
- Per me anche dopo
git config --global diff.tool vimdiff
,git diff
mostra ancora tutto come se non cambiassi nulla. - prova
git difftool
Rispondi
Se sei modificare un file aperto e confrontarlo con un altro file senza chiudere quello corrente:
Apri il nuovo file a schermo diviso:
Per divisione verticale:
:vs otherFile
o divisione orizzontale:
:split otherFile
Passa i cursori a uno schermo diviso diverso:
ctrl+w ctrl+w
Richiama “modalità diff” nel file:
:diffthis
Passa a un altro file e richiama “modalità diff”:
:diffthis
Per disattivare la “modalità diff”:
:diffoff
Commenti
- Per evitare di passare da un mezzo allaltro Nei buffer puoi usare
:windo diffthis
anche - @statox: funziona anche per
diffoff
, quindi:windo diffthis
e:windo diffoff
per avviare e arrestare diff per due finestre aperte. O abbreviato in:windo difft
ediffo!
. - Se si inizia con un file aperto
File1
, puoi anche utilizzare:vert diffs File2
per aprireFile2
in una divisione verticale a destra e diffonderlo conFile1
.
Risposta
Puoi inserire limpostazione sotto menzionata in .gitconfig
file trovato nella directory %homepath%
(o %userprofile%
) della directory dellutente attualmente connesso:
[diff] tool = vimdiff
Ciò consentirà allo strumento git bash di iniziare a utilizzare vimdiff anche come strumento diff esterno.
Risposta
Di seguito è riportato il mio git config:
https://github.com/tracyone/dotfiles/blob/master/.gitconfig
[core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 [difftool] prompt = 0
Risposta
Per NeoVim, puoi configurare il tuo ~/.gitconfig
con i seguenti comandi
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\""
Il tuo ~/.gitconfig
dovrebbe quindi avere il seguente aspetto:
[merge] tool = nvim [mergetool] keepBackup = false [mergetool "nvim"] cmd = nvim -d $LOCAL $REMOTE $MERGED -c "$wincmd w" -c "wincmd J"
Fare riferimento a documentazione di Nvim: diff per maggiori informazioni su come configurarlo a proprio piacimento.
Risposta
Riesco a vedere solo tre sit uazioni per usare vim come difftool. Sono descritti brevemente di seguito:
-
Per git difftool, inserisci quanto segue nel tuo
~/.gitconfig
:[core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3
-
Per aprire vim come strumento diff per due file, puoi fare quanto segue:
vimdiff file1.ext file2.ext # for vim nvim -d file1.ext file2.ext # for neovim
-
Per ottenere la visualizzazione delle differenze per i buffer attualmente attivi, cioè tutti i buffer a cui è assegnata una finestra nella tabpage attualmente attiva, puoi fare quanto segue:
:windo diffthis " to get diff view :windo diffoff " to remove diff view
Per ulteriori informazioni, vedere :h diff
Commenti
- se è ancora aperto un solo file:
:vert diffs File2
per diff con File2.
risposta
ecco cosa faccio:
- apri una finestra con il primo file (o il contenuto del testo se incolli dati)
- apri il file / finestra successivo utilizzando
:vnew
(per avere entrambe le finestre affiancate) o:new
( avere le finestre in alto e b ottom). se hai un file specifico da aprire nella seconda finestra, puoi includere il percorso in questo modo::vnew /path/to/secondfile.txt
- usa F8 per attivare una funzione personalizzata che trasforma diff modalità di attivazione e disattivazione
ecco la funzione personalizzata presente nel mio ~/.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
Commenti
- puoi utilizzare il comando
:diffthis
ediffoff!
quindi non ‘ devi impostare tu stesso tutte le opzioni di diff (eg cursorbind è impostato anche da diffmode)
Risposta
Ho adottato da .vimrc con alcuni utili comandi in modalità diff (parte inferiore). Se si modifica in modalità normale, le impostazioni vengono ripristinate (parte superiore). Puoi copiarlo semplicemente nel tuo file .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
Ovviamente puoi modificare le mie impostazioni. Se desideri inserire un altro comando su ” 0 “, modifica il comando subito dopo ” Op ” ad es con ” za ” che alterna tra piegatura e apertura:
nmap <Esc>Op za " 0 0
Tieni presente il diverso utilizzo di ” map ” e ” nmap ” a seconda della chiave.
:Gdiff
e:Gvdiff
entrambi i comandi ti permettono di vedere il diff fianco a fianco del buffer corrente se il tuo buffer corrente è gestito da git. Ti aiuta anche a risolvere i conflitti in un layout a tre finestre quando hai conflitti di unione su alcuni filevd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; }
e invoco convd file1 file2
. Utilizzadiff
per determinare se i file differiscono e aprevimdiff
solo se è così. Altrimenti, resto nel guscio. Disattivo anche levidenziazione della sintassi in Vim perché trovo che distragga quando differisco. Funziona solo con due file.