Thursday, October 17, 2013

Re: containedin=Comment doesn't work

David Barnett <daviebdawg@gmail.com> 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 vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

No comments: