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

  • En enkel google-sökfråga skulle ha varit tillräcklig: github.com/rhysd/conflict-marker.vim
  • @klaus, jag borde ha nämnt att jag tittade på det pluginet medan jag gjorde mycket google-sökning. Det här pluginet markerar själva konfliktmarkörerna. Det ' t markerar inte också texten som markörerna är associerade med, på andra rader. Jag tror att det stora problemet är om det ' ett sätt att markera vissa rader beroende på andra rader. Det betyder, i mitt exempel, xyz skulle vanligtvis inte markeras, men eftersom det ' s mellan <<<<<<< och ||||||| Jag skulle vilja att det skulle markeras.

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:

ange bildbeskrivning här

Ä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 av conflictMiddle 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 som conflictEnd enligt SynStack() -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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *