Se git
estiver executando uma fusão de 3 vias e houver um conflito ele não pode ser resolvido, ele marca essa área do arquivo assim:
No unresolvable conflicts here <<<<<<< HEAD xyz ||||||| parent of ... abc ======= 123 >>>>>>> ...
Existe uma maneira (e, se houver, como) para alterar a cor de fundo dessas 3 “seções”:
-
<<<<<<< HEAD
até a linha antes de||||||| parent of ...
-
||||||| parent of ...
até a linha antes de=======
- A linha depois de
=======
através da linha>>>>>>> ...
(EDITAR: A questão gira em torno de se existe uma maneira de destacar certas linhas dependendo de outras linhas. xyz
normalmente não seria destacado, mas já que está “entre <<<<<<<
e |||||||
seria destacado.)
Com a capacidade de lidar também com outros conjuntos de marcadores de conflito?
Usando a versão mais recente do vim disponível na hora de um comentário. Portanto, a partir de agora, 8.1.1183.
Eu uso um fundo preto e 256 cores no meu terminal. Eu estava pensando que seria bom fornecer essas seções usando as cores mais escuras R / G / B / C / M / Y, então elas não causaram muitos problemas com o realce de sintaxe. (Falando sobre cores ANSI 52, 22, 17, 23, 53 e 58 – não as cores de 1-6.)
Comentários
Resposta
Na configuração do Vim, você pode fazer o seguinte (alterar o cores e estilo de sua preferência):
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
Que é processado da seguinte maneira:
É isso que você procura?
Comentários
- Isso ' é absolutamente o que eu ' m depois. Eu ' estou tendo algumas estranhezas com o vimscript. Se eu digitar seu exemplo, ele se parecerá com a imagem que você postou. Se eu salvar seu exemplo e reiniciar o vim editando o novo arquivo, ele fica terrivelmente fora de controle. (vim 8.1.1186.) Ainda mais estranho, se eu excluir todas as linhas de um arquivo existente que aparece de maneira estranha e colar novamente seu conteúdo, ele ' ainda está aparecendo errado. i.ibb.co/jvGMH6t/wtfvim.jpg
- Usá-lo em um cenário de mesclagem real desencadeia uma coloração ainda mais estranha do que a imagem I vinculado, com:
conflictStart
devidamente destacado; a|||||||
parte deconflictMiddle
em vermelho, mas o resto da linha em azul como deveria ser; o=======
em vermelho; a linha>>>>>>> .*
em amarelo (onde o amarelo entrou nisso, não há amarelo); e o resto do arquivo que não deve ' fazer parte do conflito em verde, ainda sendo selecionado comoconflictEnd
de acordo com a funçãoSynStack()
de stackoverflow.com/questions/30247603 - Da mesma forma, usando o real cenário de mesclagem, se eu copiar / colar o conteúdo em um novo arquivo, ele será exibido conforme o esperado, mas assim que ' for salvo e o vim for reiniciado, ele será exibido incorretamente.
- Em um cenário de mesclagem real, você pode desativar a coloração diff original usando
:diffoff
, deixando apenas o tipo de arquivo ' s destaque de sintaxe. Vou brincar um pouco para ver o seu primeiro caso. - Ack, desculpe, tinha esquecido que deixei o plugin conflito_marker instalado depois de tentar antes da minha postagem, que era conflitante e causava o problema. Removendo isso e não tendo mais esse problema.
Resposta
- conflito-marcador.vim pode destacar os próprios marcadores; também oferece saltos e maneiras de resolvê-los.
- meu próprio plug-in ConflictDetection detecta e destaca as seções inteiras (por meio de realce de sintaxe); um plug-in ConflictMotions complementar oferece movimentos e comandos para resolução.
xyz
normalmente não seria destacado, mas como ' s entre<<<<<<<
e|||||||
Eu gostaria que fosse destacado.