Hvis git
udfører en 3-vejs fletning og har en konflikt det kan ikke løse, det markerer det område af filen på denne måde:
No unresolvable conflicts here <<<<<<< HEAD xyz ||||||| parent of ... abc ======= 123 >>>>>>> ...
Er der en måde (og i givet fald hvordan) at ændre baggrundsfarven på disse 3 “sektioner”:
-
<<<<<<< HEAD
gennem linjen før||||||| parent of ...
-
||||||| parent of ...
gennem linjen før=======
- Linjen efter
=======
gennem linjen>>>>>>> ...
(EDIT: Spørgsmålet drejer sig om, hvorvidt der er en måde at fremhæve visse linjer afhængigt af andre linjer. xyz
vil normalt ikke blive fremhævet, men da det er mellem <<<<<<<
og |||||||
det ville blive fremhævet.)
Med også at være i stand til at håndtere andre sæt konfliktmarkører?
Brug af den seneste version af vim, der var tilgængelig på tidspunktet for en kommentar. Så fra nu af 8.1.1183.
Jeg bruger en sort baggrund og 256 farver i min terminal. Jeg tænkte, at det ville være rart at give disse sektioner ved hjælp af de mørkeste R / G / B / C / M / Y-farver, så de forårsagede ikke meget af et problem med syntaksfremhævning. (Taler om ANSI-farver 52, 22, 17, 23, 53 og 58 – ikke 1-6 farverne.)
Kommentarer
Svar
I din Vim-konfiguration kan du gøre følgende (ændre farver og styling efter 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 gengives som følger:
Er det hvad du leder efter?
Kommentarer
- At ' er absolut hvad jeg ' efter. Jeg ' har dog nogle underlige ting med vimscriptet. Hvis jeg skriver dit eksempel, ser det ud som det billede, du har sendt. Hvis jeg gemmer dit eksempel, skal du genstarte vim-redigering af den nye fil, det bliver forfærdeligt ude af whack. (vim 8.1.1186.) Endnu mærkeligere, hvis jeg derefter sletter alle linjer i en eksisterende fil, der viser underligt, og indsætter dens indhold igen, vises det ' stadig forkert. i.ibb.co/jvGMH6t/wtfvim.jpg
- Brug af det i et faktisk fletningsscenarie udløser en endnu mærkeligere farve end billedet I sammenkædet, idet:
conflictStart
er korrekt fremhævet;|||||||
del afconflictMiddle
i rødt, men resten af linjen i blå som den burde være;=======
i rødt;>>>>>>> .*
linjen i gul (hvor gul kom ind i dette, der er ingen gul); og resten af filen, der overhovedet ikke skal være ', bliver plukket op somconflictEnd
i henhold tilSynStack()
-funktionen fra stackoverflow.com/questions/30247603 - Ligeledes ved hjælp af den aktuelle flet scenarie, hvis jeg kopierer / indsætter indholdet i en ny fil, vises det som forventet, men så snart det ' er gemt og vim genstartes, vises det forkert.
- I et faktisk sammenlægningsscenarie kan du deaktivere den oprindelige diff-farve ved hjælp af
:diffoff
og kun efterlade filtypen ' s syntaks fremhævning. Jeg vil spille lidt for at se til din første sag. - Ack, undskyld, havde glemt, at jeg havde efterladt konflikt_markør-pluginet installeret efter at have prøvet det før mit indlæg, hvilket var modstridende og forårsagede problemet. Fjerner det og har ikke længere problemet.
Svar
- conflict-marker.vim kan fremhæve markørerne selv; det tilbyder også spring og måder at løse dem på.
- mit eget ConflictDetection-plugin registrerer og fremhæver hele sektionerne (via syntaksfremhævning); en ledsager Plugin til ConflictMotions tilbyder bevægelser og kommandoer til opløsning.
xyz
normalt ikke blive fremhævet, men da det ' s mellem<<<<<<<
og|||||||
Jeg vil gerne have det fremhævet.