Substituir cor do plano de fundo da linha do cursor pelo realce da sintaxe

7

Eu configurei a cor de fundo da linha atual para cinza claro assim:

hi CursorLine cterm=NONE ctermbg=253

(Observe que meu esquema de cores é preto e branco.)

No entanto, dessa forma, qualquer cor de fundo definida pelo realce da sintaxe é substituída por isso, ou seja, se uma palavra na linha atual for destacada, por exemplo, branco sobre vermelho, vejo o texto em cinza branco sobre claro. Só vejo que a linha (ou parte dela) deve ficar destacada em vermelho se eu mover o cursor para outra linha.

O que eu gostaria é que apenas a parte da linha atual para a qual nenhuma cor de fundo especial esteja definida seja destacada em cinza claro pela linha do cursor, mas que o realce da linha do cursor seja substituído pelo realce da sintaxe.

Isso é possível?

PS: O caso específico em que encontrei esse problema é a segunda linha em um arquivo tmp git commit, em que o texto na segunda linha é branco sobre vermelho (por qualquer motivo).

flotzilla
fonte
O motivo "seja qual for" é que você deve deixar a segunda linha do seu git commit em branco. Esse é o estilo preferido com confirmações do git: 1 linha curta (~ 60 caracteres) descrevendo a confirmação, seguida por uma linha em branco, seguida de uma explicação do tamanho que você deseja / pode.
Shahbaz
@ Shahbaz: Ok, obrigado pela explicação, que esclarece as coisas. Até agora, só usei o git casualmente para algumas coisas particulares, mas nunca o aprendi (ou seja, leia um guia ou mais), então ainda não estou ciente dessas coisas. A leitura do livro git está na minha lista de tarefas, antes de começar a usar o git mais amplamente.
Flotzilla 15/05
O Git é incrível e pode fazer coisas além da sua imaginação, mas é muito simples para o uso diário. Feliz aprendizado!
Shahbaz 15/05

Respostas:

5

Certa vez, sugeri uma alteração na lista de discussão vim_dev , mas Bram foi contra, com o seguinte raciocínio:

Tendo a cor de fundo da sintaxe anulada, a cor de fundo da 'linha do cursor' resultará na quebra da linha do cursor em partes ou dificilmente visível.

Alternativa

Com a matchadd()função, você pode especificar um {priority}que determina se o realce estará na frente ou atrás da linha do cursor. Infelizmente, isso é totalmente diferente do realce da sintaxe e tem um escopo diferente. Portanto, não ajuda com problemas de sintaxe, mas possibilita outros usos, por exemplo, realces no meu plug-in Mark .

Gambiarra

Você pode manter a cor de fundo da sintaxe se usar o reverseatributo Por exemplo, em vez de definir

:hi Todo guifg=Black guibg=Yellow

faça isso:

:hi Todo guifg=Yellow guibg=Black gui=reverse

Infelizmente, agora você tem outro problema: A cor do texto (primeiro plano) muda de preto para a cor da linha do cursor. Isso funciona bem para o erro branco sobre vermelho, destacando você mencionando (passando para (brilhante) -cursorline-on-red), mas menos bem para o meu Todoexemplo (cursorline-on-Yellow). Além disso, o reverseatributo não é suportado em todos os terminais.

Sumário

Infelizmente, não há solução fácil. Apesar das deficiências, eu uso a solução alternativa acima (parabéns a @romainl, em cuja configuração eu vi isso pela primeira vez!)

Ingo Karkat
fonte
Obrigado pela sua resposta. Mas entendi corretamente que suas soluções sugeridas / soluções alternativas devem alterar os arquivos de sintaxe (ou seja, para especificar que um realce específico deve ter precedência sobre o realce da linha de cores)? Nesse caso, não é isso que estou procurando, o que eu gostaria de especificar é que o realce da linha de cores seja colocado atrás de qualquer realce de sintaxe. Nesse caso, terei apenas que aceitar a maneira como funciona, ou seja, que o realce da sintaxe é sempre substituído pelo realce da linha de cores.
Flotzilla 15/05
Arquivos de sintaxe geralmente não definem cores, eles apenas :hi linkpara grupos existentes (como Todo). Minha solução alternativa teria que alterar seu esquema de cores pessoal, diretamente ou no seu .vimrc.
Ingo Karkat
Ok, sim, claro, pensando bem, isso é mais ou menos o que eu quis dizer. Ainda assim, eu precisaria alterar o comportamento de realces específicos para substituir o da linha do cursor, em vez de alterar o comportamento da linha do cursor para ser substituído por qualquer destaque (o que aparentemente não é possível). Por enquanto, apenas aceitarei o destino, mas sua solução alternativa pode ser útil se houver alguns destacamentos específicos que muitas vezes me incomodam e que eu poderia corrigir seletivamente.
Flotzilla 15/05