web-dev-qa-db-fra.com

Dans vim, comment mettre en évidence TODO: et FIXME :?

Dans vim, FIXME et TODO sont mis en surbrillance, mais je ne peux pas obtenir FIXME: et TODO: (notez les deux-points après le mot-clé) pour mettre en surbrillance? Que dois-je mettre dans mon .vimrc pour y arriver?

45
Paul Biggar

Eh bien, vous avez déjà trouvé le problème, mais voici pourquoi.

Il existe trois types de base de correspondance de syntaxe: les mots clés, les correspondances et les régions. Les mots clés sont des chaînes fixes, généralement utilisées pour les mots clés de base du langage (int, double, ...) et aussi, dans votre cas, pour le FIXME et TODO. Je veux vraiment dire des chaînes fixes; ils doivent être des mots exacts et entiers, contrairement aux correspondances et aux régions, qui utilisent l'expression régulière. Par exemple, à partir de la syntaxe C:

syn keyword   cTodo   contained    TODO FIXME XXX

Il ressemble à cela dans presque toutes les définitions de syntaxe intégrées, juste avec des noms de groupe différents (cTodo).

iskeyword indique à vim si un caractère donné peut faire partie d'un mot clé. Par défaut, il n'inclut pas les deux-points, donc lors de la recherche de mots-clés, vim voit "FIXME:" comme "FIXME" et ignore les deux-points. Si vous virez sur le colon (set iskeyword+=:), vous pouvez maintenant définir un peu de surbrillance supplémentaire:

syn keyword   myTodo   contained   TODO: FIXME:

C'est à vous de décider comment vous souhaitez l'intégrer dans les groupes de syntaxe/surbrillance existants. S'il s'agit d'un seul type de fichier, vous pouvez l'ajouter au groupe de tâches de cette syntaxe (par exemple, cTodo). Si vous le voulez partout, vous pouvez faire "myTodo" comme je l'ai suggéré, puis le lier directement au groupe de surbrillance Todo (hi def link myTodo Todo).

Alternativement, vous pouvez laisser iskeyword seul (je le recommanderais probablement) et utiliser simplement une correspondance:

syn match   myTodo   contained   "\<\(TODO\|FIXME\):"
hi def link myTodo Todo
56
Cascabel
augroup vimrc_todo
    au!
    au Syntax * syn match MyTodo /\v<(FIXME|NOTE|TODO|OPTIMIZE|XXX):/
          \ containedin=.*Comment,vimCommentTitle
augroup END
hi def link MyTodo Todo

containedin l'ajoutera à tous les groupes se terminant par "Comment", plus vimCommentTitle, où " TODO: foo ne serait pas mis en surbrillance comme MyTodo sinon.

15
blueyed

Si vous créez votre propre environnement, make syntax file (not .vimrc)

  • le fichier de syntaxe globale se trouve dans le répertoire vim (ex. /usr/share/vim/vim72/syntax/c.vim)

  • et si vous créez ~/.vim/syntax/c.vim, vous pouvez ajouter votre propre syntaxe. (passer outre)

Ajoutez simplement une syntaxe supplémentaire dans ce fichier. (comme le fait @Jefromi)

2
MinSung Jung