如何获取vim中光标下高亮显示的组名?
问题描述:
我通常会定制现有的colorscheme
以满足我的需求。如何获取vim中光标下高亮显示的组名?
如果我能得到光标下的语法组名称,它会帮助我很多,就像Firebug,但在Vim中。我想知道如何去做。
答
有此功能是在网络上漂浮时,我在做同样的事情:
function! SynStack()
if !exists("*synstack")
return
endif
echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc
答
试试这个:
" diagnostics {{{
if has('balloon_eval')
nnoremap <F12> : setl beval!<CR>
set bexpr=InspectSynHL()
endif
fun! InspectSynHL()
let l:synNames = []
let l:idx = 0
for id in synstack(v:beval_lnum, v:beval_col)
call add(l:synNames, printf('%s%s', repeat(' ', idx), synIDattr(id, 'name')))
let l:idx+=1
endfor
return join(l:synNames, "\n")
endfun
"}}}
答
下面的函数将输出两个语法的名字组以及光标所在字符的翻译语法组:
function! SynGroup()
let l:s = synID(line('.'), col('.'), 1)
echo synIDattr(l:s, 'name') . ' -> ' . synIDattr(synIDtrans(l:s), 'name')
endfun
为了使这更方便,可以将它封装在自定义命令或键绑定中。
如何工作的:
-
line('.')
和col('.')
返回当前位置 -
synID(...)
返回一个数字的语法ID -
synIDtrans(l:s)
通过以下亮点转换数字语法IDl:s
链接 -
synIDattr(l:s, 'name')
返回名称对应于数字语法ID
这将呼应这样的:
vimMapModKey -> Special
+0
我发现这比接受的答案要好得多,因为当我试图弄清楚我想要改变什么时,它通常可以帮助我通过一个或多个“链接”突出显示条目。 – 2017-12-28 11:48:49
谢谢。帮助我很多。 – kev 2012-02-27 12:43:08
如果你在这里,因为你想诊断大量的红色突出显示,这是[由于拼写检查](http://*.com/questions/28647994/annoying-red-highlighting-of-random-words-in- vim)和SynStack()似乎没有检测到,由于某种原因。 – Von 2016-05-05 03:38:07