Hvis git
utfører en 3-veis sammenslåing og har en konflikt det kan ikke løse, det markerer det området av filen slik:
No unresolvable conflicts here <<<<<<< HEAD xyz ||||||| parent of ... abc ======= 123 >>>>>>> ...
Er det en måte (og i så fall hvordan) å endre bakgrunnsfargen på disse 3 «seksjonene»:
-
<<<<<<< HEAD
gjennom linjen før||||||| parent of ...
-
||||||| parent of ...
gjennom linjen før=======
- Linjen etter
=======
gjennom linjen>>>>>>> ...
(EDIT: Spørsmålet dreier seg om det er en måte å markere visse linjer avhengig av andre linjer. xyz
vil vanligvis ikke bli uthevet, men siden det er mellom <<<<<<<
og |||||||
det ville bli uthevet.)
Med å kunne håndtere andre sett med konfliktmarkører?
Bruk av den nyeste versjonen av vim som var tilgjengelig på tidspunktet for en kommentar. Så nå, 8.1.1183.
Jeg bruker svart bakgrunn og 256 farger i terminalen min. Jeg tenkte at det ville være hyggelig å gi disse seksjonene de mørkeste R / G / B / C / M / Y-fargene, så de forårsaket ikke mye av et problem med syntaksutheving. (Snakker om ANSI-farger 52, 22, 17, 23, 53 og 58 – ikke 1-6 farger.)
Kommentarer
Svar
I Vim-konfigurasjonen kan du gjøre følgende (endre farger og styling etter eget ønske):
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
Hvilket gjengis som følger:
Er det det du leter etter?
Kommentarer
- At ' er absolutt det jeg ' etter. Jeg ' har imidlertid noen underlige ting med vimscriptet. Hvis jeg skriver inn eksemplet ditt, ser det ut som bildet du la ut. Hvis jeg lagrer eksemplet ditt, så start vim med å redigere den nye filen, blir den fryktelig ute av veien. (vim 8.1.1186.) Enda merkeligere, hvis jeg da sletter alle linjene i en eksisterende fil som vises underlig, og limer innholdet på nytt, viser det ' fortsatt feil. i.ibb.co/jvGMH6t/wtfvim.jpg
- Bruk av det i et faktisk sammenslåingsscenario utløser en enda merkeligere farging enn bildet jeg koblet, med:
conflictStart
er riktig uthevet;|||||||
delen avconflictMiddle
i rødt, men resten av linjen i blått som det skal være;=======
i rødt;>>>>>>> .*
linjen i gult (hvor kom gult inn i dette, det er ikke gult); og resten av filen som ikke ' i det hele tatt ikke skal være en del av konflikten, blir fortsatt plukket opp somconflictEnd
i henhold tilSynStack()
-funksjonen fra stackoverflow.com/questions/30247603 - På samme måte bruker du den faktiske flette scenario, hvis jeg kopierer / limer inn innholdet i en ny fil, vises det som forventet, men så snart det ' er lagret og vim startes på nytt, viser det feil.
- I et faktisk sammenslåingsscenario kan du deaktivere den opprinnelige difffargen ved hjelp av
:diffoff
, og bare la filtypen ' syntaks høydepunkt. Jeg vil spille litt for å se for din første sak. - Ack, beklager, hadde glemt at jeg hadde latt plugin for konfliktmarkør være installert etter å ha prøvd det før innlegget mitt, som var motstridende og forårsaket problemet. Fjerner det og har ikke lenger det problemet.
Svar
- conflict-marker.vim kan markere markørene selv; det tilbyr også hopp og måter å løse dem på.
- min egen Plugin til ConflictDetection oppdager og fremhever hele seksjonene (via syntaksfremheving); en ledsager Plugin for ConflictMotions tilbyr bevegelser og kommandoer for løsning.
xyz
vanligvis ikke bli uthevet, men siden den ' s mellom<<<<<<<
og|||||||
Jeg vil at det skal fremheves.