[英]How to get group name of highlighting under cursor in vim?
当我做同样的事情时,有这个功能在网络上浮动:
function! SynStack()
if !exists("*synstack")
return
endif
echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc
以下函数将同时输出语法组的名称和光标所在字符的已翻译语法组:
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)
通过以下突出显示链接转换数字语法id l:s
synIDattr(l:s, 'name')
返回与数字语法ID对应的名称 这将回应如下:
vimMapModKey -> Special
这是一个映射,它将显示 synstack() 的层次结构并显示突出显示的链接。 按 gm 使用它。
function! SynStack ()
for i1 in synstack(line("."), col("."))
let i2 = synIDtrans(i1)
let n1 = synIDattr(i1, "name")
let n2 = synIDattr(i2, "name")
echo n1 "->" n2
endfor
endfunction
map gm :call SynStack()<CR>
尝试这个:
" 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
"}}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.