Come si usa vim come strumento per le differenze?

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

  • dovresti provare vim-fugitive aggiunge i comandi :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 file
  • Ho questa semplice funzione nel mio bashrc vd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; } e invoco con vd file1 file2. Utilizza diff per determinare se i file differiscono e apre vimdiff 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.

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 e diffo!.
  • Se si inizia con un file aperto File1, puoi anche utilizzare :vert diffs File2 per aprire File2 in una divisione verticale a destra e diffonderlo con File1.

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *