Loading ...
Sorry, an error occurred while loading the content.
 

containedin=Comment doesn't work

Expand Messages
  • David Barnett
    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/
    Message 1 of 2 , Oct 15, 2013
      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?

      David

      --
      --
      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@....
      For more options, visit https://groups.google.com/groups/opt_out.
    • Paul Isambert
      ... 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
      Message 2 of 2 , Oct 17, 2013
        David Barnett <daviebdawg@...> 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@....
        For more options, visit https://groups.google.com/groups/opt_out.
      Your message has been successfully submitted and would be delivered to recipients shortly.