Vim: Como sincronizar automaticamente as regras de destaque da sintaxe personalizada quando o esquema de cores muda?

1

Estou usando o VOoM (provavelmente não é necessário saber muito sobre isso para poder responder à minha pergunta, estou apenas fornecendo essas informações para o contexto) e consegui escrever algumas regras de destaque de sintaxe personalizadas para conteúdo específico .

Primeiro, estou usando uma modeline para dizer ao vim que um determinado arquivo é um esboço do VOoM, tenho isso na parte inferior desses arquivos:

/* vim: set syntax=myvoom : */

Segundo, eu tenho um arquivo /home/user/.vim/after/syntax/myvoom.vim , aqui está um trecho:

syn match voomTag "^tags:.*"
hi voomTag ctermfg=White ctermbg=Red guifg=White guibg=Red

Em alguns nós de estrutura de tópicos, tenho linhas como:

tags: foo, bar, baz

para facilitar a pesquisa, a regra de destaque da sintaxe acima apenas exibe essas linhas com um primeiro plano / plano de fundo personalizado.

Isso funciona como esperado com o esquema de cores padrão ( : colorscheme no vim retorna 'padrão').

Quando quero experimentar um esquema de cores personalizado ( mustang, por exemplo) e alterá-lo fazendo : colorscheme mustang , o destaque da sintaxe para minhas linhas de tag é perdido.

Eu gostaria de entender por que isso acontece.

Além disso, eu gostaria de aprender como sincronizar automaticamente essas regras de sintaxe personalizadas (que são gerais, não específicas a um determinado esquema de cores) quando o esquema de cores é alterado. Preciso verificar isso explicitamente de alguma forma, no arquivo myvoom.vim? Como procurar qual esquema de cores está ativo e ter regras de destaque de sintaxe personalizadas para diferentes esquemas de cores ou existe uma abordagem melhor?

AnonymousLurker
fonte

Respostas:

3

A razão pela qual isso acontece está no comando :highlight clear(consulte :help :highlight), que normalmente é um dos primeiros comandos executados pelo colorscheme. Este comando redefine todo o destaque, removendo assim o efeito do seu :highlightcomando personalizado .

Para corrigir isso, você precisa usar um dos :autocmd(consulte help :autocmd) eventos, ColorScheme(consulte :help ColorScheme), para executar seu comando após o carregamento do novo esquema de cores. Após as alterações, você myvoom.vimdeve ficar assim:

augroup VoomTagHighlight
  autocmd! ColorScheme *
         \ syn match voomTag "^tags:.*" |
         \ hi voomTag ctermfg=White ctermbg=Red guifg=White guibg=Red
augroup END

Veja também ajudar na :augroupna :help :augroup.

Se você quiser ter um destaque diferente, dependendo do esquema de cores atual, use o :highlight linkcomando (consulte :help :highlight-link) em vez de especificar suas próprias cores. Por exemplo, vinculá-lo ao Errorgrupo de destaque ficaria assim:

augroup VoomTagHighlight
  autocmd! ColorScheme *
         \ syn match voomTag "^tags:.*" |
         \ hi! link voomTag Error
augroup END
xaizek
fonte