David Barnett <[email protected]> a écrit:
> I wanted to define a simple syntax highlight match for a literal word and
> have it only match inside comments. I tried
>   syntax match myword /WORD/ containedin=Comment contained
> but quickly found that this doesn't do much since the Comment group is
> never used literally, but only linked to by other groups like vimComment.
> 
> Is there a way I can get my syntax group matched in all Comment syntax
> groups without adding each one individually?

This might not be very elegant but it should work (once tailored to your needs,
of course):

    " Add this to your .vimrc file.
    hi def link MyWord TODO

    function! s:commentword()
      syn clear MyWord
      redir => groups
      silent hi
      redir END
      let groupnames = map(split(groups, '[\n]'), 'matchstr(v:val, "^\\S\\+")')
      for g in groupnames
        if g =~ 'Comment'
          exe 'syn match MyWord /WORD/ contained containedin=' . g
        endif
      endfor
    endfunction

    augroup CommentGroup
      au!
      au Syntax * call s:commentword()
    augroup END
    " End of code.

It relies on the fact the highlight groups for comment generally
contain “Comment” in their names. We could be even smarter and check
for each group whether it is ultimately linked to the Comment group,
but then opening a new file is noticeably slower.

Best,
Paul

-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to