Vim: Como sincronizar automaticamente regras de realce de sintaxe personalizadas quando o esquema de cores é alterado?

1

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

Primeiro, eu estou usando uma modeline para dizer ao vim que um determinado arquivo é um esboço VOoM, eu tenho isso no final desses arquivos:

/* vim: set syntax=myvoom : */

Em segundo lugar, eu tenho um arquivo /home/user/.vim/after/syntax/myvoom.vim , aqui está um trecho dele:

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

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

tags: foo, bar, baz

para facilitar a pesquisa, a regra de destaque de sintaxe acima exibe apenas 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 'default').

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

Eu gostaria de entender por que isso acontece.

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

    
por AnonymousLurker 26.08.2012 / 22:02

1 resposta

3

A razão pela qual isso acontece é no comando :highlight clear (veja :help :highlight ), que normalmente é um dos primeiros comandos executados pelo esquema de cores. Este comando redefine todos os realces, removendo assim o efeito de seu comando :highlight personalizado.

Para corrigir isso, você precisa usar um dos eventos :autocmd (ver help :autocmd ), ColorScheme (ver :help ColorScheme ), para executar seu comando depois que o novo esquema de cores for carregado. Após as alterações, seu myvoom.vim deve 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 ajuda em :augroup at :help :augroup .

Se você deseja destacar diferentes dependendo do esquema de cores atual, use o comando :highlight link (consulte :help :highlight-link ) em vez de especificar suas próprias cores. Por exemplo, vinculá-lo ao grupo Error highlight seria assim:

augroup VoomTagHighlight
  autocmd! ColorScheme *
         \ syn match voomTag "^tags:.*" |
         \ hi! link voomTag Error
augroup END
    
por 27.08.2012 / 07:23

Tags