Cum folosesc vim ca instrument diferențiat?

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

  • ar trebui să încercați vim-fugitive adăugând comenzile :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șiere
  • Am această funcție simplă în bashrc vd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; } și invoc cu vd file1 file2. Folosește diff pentru a determina dacă fișierele diferă și deschide vimdiff 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.

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 și diffo!.
  • Dacă începeți cu un fișier deschis File1, puteți utiliza și :vert diffs File2 pentru a deschide File2 într-o împărțire verticală din dreapta și diferiți-l cu File1.

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 și diffoff! 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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *