2010-11-04 17 views
32

Dans vim, FIXME et TODO sont en surbrillance, mais je ne peux pas obtenir FIXME: et TODO: (notez le deux-points après le mot-clé) pour mettre en surbrillance? Que devrais-je mettre dans mon .vimrc pour que cela se produise?Dans vim, comment mettre en surbrillance TODO: et FIXME:?

+1

C'est bizarre; mine mettre en évidence avec ou sans le côlon. Cette coloration syntaxique est définie dans des syntaxes individuelles, je pense - est-ce que cela se passe dans un type de fichier spécifique? – Cascabel

+0

@Jefromi: Je pense que cela arrive dans tous les types de fichiers. –

+2

qu'est-ce que ': verbose set iskeyword?' Tell? – Benoit

Répondre

46

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

Il existe trois types 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 (int, double, ...) et aussi, dans votre cas, pour FIXME et TODO. Je veux vraiment dire des cordes fixes; ils doivent être des mots exacts et entiers, contrairement aux correspondances et aux régions qui utilisent regex. Par exemple, à partir de la syntaxe C:

syn keyword cTodo contained TODO FIXME XXX 

On dirait que, dans à peu près toutes les définitions intégrées dans la syntaxe, juste avec des noms de groupe (cTodo).

iskeyword indique à vim si un caractère donné peut faire partie du mot-clé. Par défaut, il n'inclut pas les deux points, donc quand vous cherchez des mots-clés, vim voit "FIXME:" comme "FIXME", et ignore les deux-points. Si vous virez sur le côlon (set iskeyword+=:), vous pouvez maintenant définir un peu plus de mettre en évidence:

syn keyword myTodo contained TODO: FIXME: 

Il est à vous comment vous voulez travailler dans les groupes syntaxe/highlight existants. Si c'est pour un seul type de fichier, vous pouvez l'ajouter au groupe todo 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).

Vous pouvez laisser iskeyword seul (je vous recommande sans doute cela), et il suffit d'utiliser un match:

syn match myTodo contained "\<\(TODO\|FIXME\):" 
hi def link myTodo Todo 
+0

+1 @Jefromi, cependant, je ne pense pas que cette correspondance syn fonctionne. Je l'ai giflé dans mon .vimrc et si je change FIXME à quelque chose d'autre ce n'est pas mis en évidence. – g33kz0r

+2

@ G33kx0r: Ce n'est pas la faute de ce match; ça marche s'il existe encore. Je suppose que vous activez la syntaxe (d'une manière ou d'une autre) * après * les lignes de votre exécution de vimrc, et lorsque la syntaxe est activée, elle efface d'abord l'ancienne syntaxe puis charge la syntaxe appropriée. Vous pouvez vérifier si cette correspondance est toujours en place en utilisant ': syn list myTodo'. Voir aussi ': help syntax-loading'. – Cascabel

+0

Paramétrer d'abord 'syntax on 'et ensuite' syn correspond à myTodo contenu "\ <\ (TODO \ | FIXME \):" 'dans mon fichier' vimrc' et 'hi! def lien myTodo Todo' ne fonctionne pas pour moi. D'un autre côté, si je fais, par exemple, 'au BufNewFile, BufRead * .tex syn correspond à texTodo" \ <\ (TODO \ | FIXME \): "' le fichier 'tex' résultant est correctement mis en surbrillance. Y a-t-il une solution générale? – petobens

1

Si vous faites votre propre environnement, make syntax file (not .vimrc)

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

  • et si oui vous faites ~/.vim/syntax/c.vim, alors vous pouvez ajouter une syntaxe pour votre propre . (override)

Ajoutez simplement une syntaxe supplémentaire dans ce fichier. (La façon dont @Jefromi ne)

8
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 

Le containedin ajoutera à tous les groupes se terminant par « Commentaire », plus vimCommentTitle, où " TODO: foo ne serais pas mis en évidence comme MyTodo autrement.

+0

Notes d'utilisation: vous pouvez ajouter ceci à votre fichier .vimrc, et supprimer le signe deux-points (':') si vous voulez juste le mot en surbrillance, et non les deux-points qui le suivent. Je préfère la surbrillance pour lire _NOTE_ :, pas _NOTE: _. J'écris aussi parfois NOTE ou TODO non suivi d'un deux-points. – Ari