Om git
utför en 3-vägs sammanslagning och har en konflikt det kan inte lösa sig, det markerar det området i filen så här:
No unresolvable conflicts here <<<<<<< HEAD xyz ||||||| parent of ... abc ======= 123 >>>>>>> ...
Finns det ett sätt (och i så fall hur) att ändra bakgrundsfärgen på dessa 3 ”sektioner”:
-
<<<<<<< HEAD
genom raden före||||||| parent of ...
-
||||||| parent of ...
genom raden före=======
- Raden efter
=======
genom raden>>>>>>> ...
(EDIT: Frågan kretsar kring om det finns ett sätt att markera vissa rader beroende på andra rader. xyz
skulle vanligtvis inte markeras, men eftersom det är mellan <<<<<<<
och |||||||
det skulle markeras.)
Med att också kunna hantera andra uppsättningar konfliktmarkörer?
Med den senaste versionen av vim som finns tillgänglig vid tidpunkten för en kommentar. Så nu, 8.1.1183.
Jag använder en svart bakgrund och 256 färger i min terminal. Jag tänkte att det skulle vara trevligt att ge dessa avsnitt de mörkaste R / G / B / C / M / Y-färgerna, så de orsakade inte mycket av ett problem med syntaxmarkering. (Talar om ANSI-färger 52, 22, 17, 23, 53 och 58 – inte 1-6 färgerna.)
Kommentarer
Svar
I din Vim-konfiguration kan du göra följande (ändra färger och styling efter eget tycke):
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
Vilket gör som följer:
Är det vad du är ute efter?
Kommentarer
- Att ' är absolut vad jag ' efter. Jag ' har dock några konstigheter med vimscript. Om jag skriver in ditt exempel ser det ut som bilden du publicerade. Om jag sparar ditt exempel och sedan startar om med att redigera den nya filen, blir det hemskt. (vim 8.1.1186.) Ännu konstigare, om jag sedan tar bort alla rader i en befintlig fil som visar konstigt och klistrar in innehållet på nytt, så ' visar fortfarande fel. i.ibb.co/jvGMH6t/wtfvim.jpg
- Att använda det i ett verkligt sammanfogningsscenario utlöser en ännu konstigare färg än bilden I länkad, med:
conflictStart
är korrekt markerad;|||||||
delen avconflictMiddle
i rött men resten av raden i blått som det borde vara;=======
i rött;>>>>>>> .*
raden i gult (var gult kom in i detta, det finns inget gult); och resten av filen som inte ska ' inte alls vara en del av konflikten i grönt, fortfarande plockas upp somconflictEnd
enligtSynStack()
-funktionen från stackoverflow.com/questions/30247603 - På samma sätt använder du den faktiska sammanfoga scenariot, om jag kopierar / klistrar in innehållet i en ny fil visas det som förväntat, men så snart det ' sparats och vim startas om visas det fel.
- I ett faktiskt sammanslagningsscenario kan du inaktivera den ursprungliga difffärgningen med
:diffoff
, så att endast filtypen ' s lämnas syntaxhöjdpunkt. Jag kommer att spela lite för att se för ditt första fall. - Ack, ledsen, hade glömt att jag hade lämnat plugin för konfliktmarkör installerad efter att ha provat det innan mitt inlägg, vilket var motstridigt och orsakade problemet. Tar bort det och har inte längre det problemet.
Svar
- conflict-marker.vim kan markera själva markörerna; det erbjuder också hopp och sätt att lösa dem.
- mitt eget Plugin för ConflictDetection upptäcker och belyser hela sektionerna (via syntaxmarkering); en följeslagare Plugin för ConflictMotions erbjuder rörelser och kommandon för upplösning.
xyz
skulle vanligtvis inte markeras, men eftersom det ' s mellan<<<<<<<
och|||||||
Jag skulle vilja att det skulle markeras.