Search code examples
vimthemestextmate

Find out to which highlight-group a particular keyword/symbol belongs in vim


I am coming to Vim from TextMate, and I would like to customise my vim colorscheme. It would be really helpful if I could find out to which highlight-group(s) any particular word or symbol belongs. In TextMate, I would place the caret on the word/symbol in question, then hit ctrl-shift-p and a tool tip would appear saying something like:

text.html.basic
meta.tag.structure.any.html
string.quoted.double.html

From this information, it is really straightforward to edit a TextMate color theme to apply (or remove) formatting to the text in question.

In Vim, if I want to change formatting for a certain word or symbol, I'm not sure where to start. Is there anything equivalent to TextMate's ctrl-shift-p?


Solution

  • I'm not sure I understood right, but are you looking for this ?

    " adds to statusline
    set laststatus=2
    set statusline+=%{synIDattr(synID(line('.'),col('.'),1),'name')}
    
    " a little more informative version of the above
    nmap <Leader>sI :call <SID>SynStack()<CR>
    
    function! <SID>SynStack()
        if !exists("*synstack")
            return
        endif
        echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
    endfunc