Pergunta

No VIM, eu preciso executar uma tarefa simples - destaque "(" e ")". Eu posso fazer isso facilmente através da emissão de dois comandos:

:syn match really_unique_name display "[()]"
:hi really_unique_name guifg=#FF0000

Mas se eu adicionar mesmos comandos (sem ':' é claro) para esvaziar .vimrc e reiniciar VIM - "(" e ")" não estão mais em destaque na arquivos .cpp. Parece que se eu criar / arquivo.cpp carga, arquivo VIM cargas de sintaxe para ele que substitui meus destaques personalizados. Como posso configurar destaques no meu arquivo .vimrc por isso vai ter lugar após definições de sintaxe padrão ou não será afetado pela definição de sintaxe padrão?

Foi útil?

Solução

Existem quatro opções (dois dos quais foram sugeridos por outras pessoas):

  1. Use a estrutura after em vimfiles (~ / .vim / depois / sintaxe / cpp.vim):

    :help after-directory
    
  2. Use páreo para a janela atual:

    :match really_unique_name "[()]"
    
  3. Use matchadd (), novamente para a janela atual, mas isso permite-lhe eliminar partidas individuais se mais tarde você precisar:

    :call matchadd('really_unique_name', "[()]")
    " Or
    :let MyMatchID = matchadd('really_unique_name', "[()]")
    " and then if you want to switch it off
    :call matchdelete(MyMatchID)
    
  4. Instale do Dr. Chip rainbow.vim plugin para get cinta destaque em cores diferentes, dependendo do nível de recuo.

Para esta situação, eu recomendo a opção 1, uma vez que parece que você deseja torná-lo parte da sintaxe geral. Se você quer usar jogos e você quer que eles sejam específicas tampão (em vez de janela específica), você vai precisar de algo como:

function! CreateBracketMatcher()
    call clearmatches()
    call matchadd('really_unique_name', "[()]")
endfunc
au BufEnter <buffer> call CreateBracketMatcher()

Para obter mais informações, consulte:

:help after-directory
:help :match
:help matchadd()
:help matchdelete()
:help clearmatches()
:help function!
:help autocmd
:help autocmd-buffer-local
:help BufEnter

Você pode também estar interessado na minha resposta à esta pergunta , que cobre o realce mais geral do operador.

Outras dicas

Coloque as configurações em ~ / .vim / depois / sintaxe / cpp.vim

Em vez de usar jogo syn, basta usar jogo. por exemplo:

hi really_unique_name guifg=#FF0000
match really_unique_name "[()]"

match tem precedência maior do que syn-jogo (ou seja: o seu destaque vai substituir o destaque gerado pelo syn-jogo)., E (bem-comportado) arquivos de sintaxe não deve mexer com ele

A única ressalva com jogo é que é per-janela, ao invés de per-tampão.

Se precisar de partidas adicionais que você pode usar 2match e 3match.

Veja :help :match no Vim para mais informações.

Eu costumo fazê-lo como este:

:hi really_unique_name guifg=#FF0000
:au BufNewFile,BufRead * :syn match really_unique_name display "[()]"

au significa autocmd. Ajuda dirá mais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top