Dacă git
efectuează o îmbinare în trei direcții și are un conflict nu se poate rezolva, marchează acea zonă a fișierului astfel:
No unresolvable conflicts here <<<<<<< HEAD xyz ||||||| parent of ... abc ======= 123 >>>>>>> ...
Există o modalitate (și, dacă da, cum) să se schimbe culoarea de fundal a acestor 3 „secțiuni”:
-
<<<<<<< HEAD
prin linia dinaintea||||||| parent of ...
-
||||||| parent of ...
prin linia dinaintea=======
- Linia după
=======
prin linia>>>>>>> ...
(EDIT: întrebarea se învârte în jurul valorii de dacă există o modalitate de a evidenția anumite linii în funcție de alte linii. xyz
de obicei nu ar fi evidențiat, dar din moment ce se află între <<<<<<<
și |||||||
ar fi evidențiat.)
Cu posibilitatea de a gestiona și alte seturi de markeri de conflict?
Folosind cea mai recentă versiune de vim disponibilă în momentul unui comentariu. Deci, de acum, 8.1.1183.
Folosesc un fundal negru și 256 de culori în terminalul meu. Mă gândeam că ar fi frumos să dau aceste secțiuni folosind cele mai întunecate culori R / G / B / C / M / Y, așa că nu au cauzat o mare problemă cu evidențierea sintaxei. (Vorbind despre culorile ANSI 52, 22, 17, 23, 53 și 58 – nu 1-6 culori.)
Comentarii
Răspuns
În configurația Vim, puteți face următoarele (modificați culori și stil pe placul dvs.):
function! ConflictsHighlight() abort syn region conflictStart start=/^<<<<<<< .*$/ end=/^\ze\(=======$\||||||||\)/ syn region conflictMiddle start=/^||||||| .*$/ end=/^\ze=======$/ syn region conflictEnd start=/^\(=======$\||||||| |\)/ end=/^>>>>>>> .*$/ highlight conflictStart ctermbg=red ctermfg=black highlight conflictMiddle ctermbg=blue ctermfg=black highlight conflictEnd ctermbg=green cterm=bold ctermfg=black endfunction augroup MyColors autocmd! autocmd BufEnter * call ConflictsHighlight() augroup END
Care se redă după cum urmează:
Este ceea ce căutați?
Comentarii
- Asta ' este absolut ceea ce am ' m după. Cu toate acestea, ' am unele ciudățenii cu vimscript. Dacă introduc exemplul dvs., arată exact ca imaginea pe care ați postat-o. Dacă vă salvăm exemplul, reporniți editarea vim a noului fișier, acesta devine oribil. (vim 8.1.1186.) Chiar mai ciudat, dacă șterg apoi toate liniile dintr-un fișier existent care se afișează ciudat și re-lipesc conținutul acestuia, ' se afișează în continuare greșit. i.ibb.co/jvGMH6t/wtfvim.jpg
- Utilizarea acestuia într-un scenariu de îmbinare efectiv declanșează o colorare chiar mai ciudată decât imaginea I legat, cu:
conflictStart
fiind evidențiat corect; partea|||||||
aconflictMiddle
în roșu, dar restul liniei în albastru așa cum ar trebui;=======
în roșu; linia>>>>>>> .*
în galben (de unde a intrat galbenul în acesta, nu există galben); și restul fișierului care nu ar trebui să ' să fie deloc parte verde a conflictului, fiind preluat în continuare caconflictEnd
funcțiaSynStack()
de la stackoverflow.com/questions/30247603 - La fel, utilizând actualul combinați scenariul, dacă copiez / lipesc conținutul într-un fișier nou, acesta se afișează așa cum era de așteptat, dar de îndată ce ' este salvat și vim este repornit, se afișează greșit.
- Într-un scenariu de îmbinare real, puteți dezactiva colorarea diferită originală utilizând
:diffoff
, lăsând doar tipul de fișier ' s evidențierea sintaxei. Voi juca puțin să văd pentru primul dvs. caz. - Ack, îmi pare rău, am uitat că am lăsat pluginul conflict_marker instalat după ce l-am încercat înainte de postarea mea, care era în conflict și cauzează problema. Îndepărtăm acest lucru și nu mai avem această problemă.
Răspuns
- conflict-marker.vim poate evidenția marcatorii înșiși; oferă, de asemenea, salturi și modalități de a le rezolva.
- propriul meu plugin ConflictDetection detectează și evidențiază întreaga secțiune (prin evidențierea sintaxei); un însoțitor pluginul ConflictMotions oferă mișcări și comenzi pentru rezolvare.
xyz
nu ar fi de obicei evidențiat, dar din moment ce ' s între<<<<<<<
și|||||||
Aș dori să fie evidențiat.