Folosesc vim ca editor principal.
De asemenea, aș dori să folosesc vim pentru a difera fișiere și a modifica fișierele în timp ce fac diff pentru a remedia modificările ușoare (mai degrabă decât majoritatea tehnicilor diff care sunt un ciclu de diff / fix / diff / fix).
În plus, există modalități ușoare de a integra vim în instrumentele diff utilizate de instrumentele / site-urile de control sursă (Mă gândesc în mod specific la git, dar sunt sigur că alte persoane ar fi interesate de integrarea cu alte instrumente / site-uri de control sursă).
Comentarii
Răspuns
vim are această funcționalitate încorporată (cu semnalizatorul corect al liniei de comandă ).
vim -d <file1> <file2>
Aceasta deschide fiecare fișier într-o vizualizare și evidențiază diferențele.
Orice cod identic este folded
departe, astfel încât să nu aveți nevoie să priviți cod identic sau să derulați prin bucăți uriașe de cod identic.
Dar există și o aplicație de împachetare vimdiff
care invocă corect vim cu semnalizatoarele corecte.
vimdiff source1.cpp source2.cpp
Dacă utilizați git, puteți configura un instrument extern de dif. Deci, este ușor să configurați vimdiff pentru a fi instrumentul de diferențiere pentru git.
git config --global diff.tool vimdiff
Când utilizați vimdiff puteți edita ambele părți, iar evidențierea diferită păstrează ritmul pentru a afișa tu diferențele.
Notă: Când editați dintr-un git diff. Dacă încercați și editați versiunea stocată a fișierului, modificările dvs. vor fi eliminate atunci când ieșiți (git nu are încredere în dvs. cu originalul, deci diferiți de o copie tmp), dar puteți edita copia locală în conținutul inimii și salvați-l peste versiunea dvs. actuală.
Unele comenzi de bază care sunt utile în 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
Alte setări vim pe care le folosesc pentru a lucra cu highliting cu vimdiff
if &diff highlight! link DiffText MatchParen endif
Aceasta dezactivează evidențierea pe biții de cod care sunt modificați. Deci, linia modificată este evidențiată, astfel încât să pot vedea modificările, dar textul actual care se schimbă iese în evidență pe linie (deoarece nu este evidențiat).
Comentarii
- De asemenea, gestionează până la 4 buffere, ceea ce îl face excelent pentru compararea fișierelor de configurare.
- Puteți folosi și comanda
:diffthis
pentru a iniția o diff când Vim rulează deja. - Și: diffoff pentru a-l opri. Cred că un link către documentația vim ‘ ar fi benefic: vimdoc.sourceforge.net/htmldoc/diff.html
- Pentru mine chiar și după
git config --global diff.tool vimdiff
,git diff
arată în continuare totul ca și cum nu schimb nimic. - încercați
git difftool
Răspundeți
Dacă sunteți editarea unui fișier deschis și doriți să îl comparați cu un alt fișier fără a închide cel curent:
Deschideți noul fișier în ecranul divizat:
Pentru divizarea verticală:
:vs otherFile
sau divizare orizontală:
:split otherFile
Comutați cursorii pe un ecran divizat diferit:
ctrl+w ctrl+w
Invocați „modul diff” în fișier:
:diffthis
Comutați la alt fișier și invocați „modul diff”:
:diffthis
Pentru a dezactiva „modul diff”:
:diffoff
Comentarii
- Pentru a evita comutarea între n tampoanele pe care le puteți utiliza și
:windo diffthis
- @statox: funcționează și pentru
diffoff
, deci:windo diffthis
și:windo diffoff
pentru start și stop diff pentru două ferestre deschise. Sau abreviat:windo difft
șidiffo!
. - Dacă începeți cu un fișier deschis
File1
, puteți utiliza și:vert diffs File2
pentru a deschideFile2
într-o împărțire verticală din dreapta și diferiți-l cuFile1
.
Răspuns
Puteți plasa setarea menționată mai jos în .gitconfig
fișier găsit în %homepath%
(sau %userprofile%
) directorul utilizatorului conectat în prezent:
[diff] tool = vimdiff
Acest lucru va permite instrumentului git bash să înceapă să utilizeze și vimdiff ca instrument extern de difuzare.
Răspuns
Urmează config-ul meu git:
https://github.com/tracyone/dotfiles/blob/master/.gitconfig
[core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 [difftool] prompt = 0
Răspuns
Pentru NeoVim, puteți configura ~/.gitconfig
cu următoarele comenzi
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
ar trebui să arate astfel:
[merge] tool = nvim [mergetool] keepBackup = false [mergetool "nvim"] cmd = nvim -d $LOCAL $REMOTE $MERGED -c "$wincmd w" -c "wincmd J"
Consultați Documentație Nvim: diff pentru mai multe informații despre cum să o configurați după cum doriți.
Răspuns
Nu pot vedea decât trei utilizări pentru a utiliza vim ca instrument difto. Acestea sunt descrise pe scurt mai jos:
-
Pentru git difftool, introduceți următoarele în
~/.gitconfig
:[core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3
-
Pentru a deschide vim ca instrument diferit pentru două fișiere, puteți face următoarele:
vimdiff file1.ext file2.ext # for vim nvim -d file1.ext file2.ext # for neovim
-
Pentru a obține vizualizarea dif pentru bufferele care sunt active în prezent, adică toate bufferele care au o fereastră atribuită acestora în pagina curentă activă, puteți face următoarele:
:windo diffthis " to get diff view :windo diffoff " to remove diff view
Pentru mai multe informații, consultați :h diff
Comentarii
- dacă încă este deschis un singur fișier:
:vert diffs File2
să difere cu File2.
Răspundeți
iată ce fac:
- deschideți o fereastră cu primul fișier (sau conținutul textului dacă lipiți date)
- deschideți următorul fișier / fereastră folosind
:vnew
(pentru a avea ambele ferestre una lângă alta) sau:new
a avea ferestrele sus și b otom). dacă aveți un fișier specific de deschis în a doua fereastră, puteți include calea astfel::vnew /path/to/secondfile.txt
- utilizați F8 pentru a comuta o funcție personalizată care transformă dif modul activat și dezactivat
aici „este funcția personalizată care se află în ~/.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
Comentarii
- puteți utiliza comanda
:diffthis
șidiffoff!
deci nu ‘ nu trebuie să setați singur toate opțiunile de dif (de ex. cursorbind este setat și prin diffmode)
Răspuns
Am adoptat de .vimrc cu câteva comenzi utile în modul diff (partea inferioară). Dacă editați în modul normal, setările sunt resetate (partea superioară). Puteți să îl copiați pur și simplu în fișierul dvs. .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
Desigur, puteți modifica setările mele. Dacă doriți să puneți o altă comandă pe ” 0 „, modificați comanda imediat după ” Op ” de ex cu ” za ” care comută între pliere și desfășurare:
nmap <Esc>Op za " 0 0
Vă rugăm să fiți conștienți de utilizarea diferită a ” hartă ” și ” nmap ” în funcție de cheie.
:Gdiff
și:Gvdiff
ambele comenzi vă permit să vedeți diferențele cot la cot ale bufferului curent dacă bufferul dvs. curent este gestionat de git. De asemenea, vă ajută să rezolvați conflictele într-un aspect cu trei ferestre atunci când aveți conflicte de îmbinare pe unele fișierevd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; }
și invoc cuvd file1 file2
. Foloseștediff
pentru a determina dacă fișierele diferă și deschidevimdiff
numai dacă este așa. Altfel, rămân în coajă. De asemenea, dezactivez evidențierea sintaxei în Vim, deoarece mi se pare că distrage atenția atunci când diferă. Funcționează numai cu două fișiere.