Question

Dans VIM, je dois effectuer une tâche simple - mettre en surbrillance "(" et ")". Je peux le faire facilement en émettant deux commandes:

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

Mais si j'ajoute les mêmes commandes (sans ':' bien sûr), vider .vimrc et redémarrer VIM - "(" et ")" ne sont plus en surbrillance dans les fichiers .cpp. Il semble que si je crée / charge un fichier .cpp, VIM charge un fichier de syntaxe qui remplace mes surbrillances personnalisées. Comment puis-je configurer les surlignages dans mon fichier .vimrc afin qu’il se déroule après les définitions de syntaxe standard ou ne soit pas affecté par la définition de syntaxe standard?

Était-ce utile?

La solution

Il existe quatre options (deux d'entre elles ont été suggérées par d'autres):

  1. Utilisez la structure after dans vimfiles (~ / .vim / after / syntax / cpp.vim):

    :help after-directory
    
  2. Utiliser la correspondance pour la fenêtre en cours:

    :match really_unique_name "[()]"
    
  3. Utilisez matchadd (), de nouveau pour la fenêtre en cours, mais cela vous permet de supprimer des correspondances individuelles si vous devez ultérieurement:

    :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. Installez le rainbow.vim plugin de Dr Chip pour mettre en évidence l'accolade en différentes couleurs en fonction du niveau d'indentation.

Pour cette situation, je recommanderais l'option 1, car il semblerait que vous souhaitiez l'intégrer à la syntaxe générale. Si vous voulez utiliser des correspondances et que vous voulez qu'elles soient spécifiques au tampon (plutôt qu'à la fenêtre), vous aurez besoin de quelque chose comme:

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

Pour plus d'informations, voir:

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

Vous pouvez également être intéressé par ma réponse à cette question , qui couvre la mise en évidence plus générale des opérateurs.

Autres conseils

Placez les paramètres dans ~ / .vim / after / syntax / cpp.vim

Au lieu d'utiliser syn match, utilisez simplement match. par exemple:

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

match a une priorité plus élevée que syn-match (c'est-à-dire que sa mise en surbrillance remplacera la surbrillance générée par syn-match), et les fichiers de syntaxe (bien comporté) ne devraient pas s'en mêler.

Le problème avec la correspondance est que c'est par fenêtre plutôt que par mémoire tampon.

Si vous avez besoin de correspondances supplémentaires, vous pouvez utiliser 2match et 3match.

Voir : help: match dans Vim pour plus d'informations.

Je le fais habituellement comme ça:

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

au signifie autocmd . L'aide en dira plus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top