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

  • Uma simples consulta de pesquisa do Google teria bastado: github.com/rhysd/conflict-marker.vim
  • @klaus, eu deveria ter mencionado que olhei para esse plug-in enquanto fazia muito pesquisa do Google. Esse plug-in destaca os próprios marcadores de conflito. Ele não ' também destaca o texto ao qual esses marcadores estão associados, em outras linhas. Acho que o grande problema em questão é se há ' é uma maneira de destacar certas linhas dependendo de outras linhas. Significando, em meu exemplo, xyz normalmente não seria destacado, mas como ' s entre <<<<<<< e ||||||| Eu gostaria que fosse destacado.

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:

insira a descrição da imagem aqui

É 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 de conflictMiddle 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 como conflictEnd de acordo com a função SynStack() 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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *