我通常会定制现有的colorscheme
以满足我的需求。
如果我可以在光标下获取语法组名称,它会对我有所帮助,就像Firebug但在Vim中一样。我想知道怎么做。
答案 0 :(得分:19)
当我做同样的事情时,这个功能在网络上浮动:
function! SynStack()
if !exists("*synstack")
return
endif
echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc
答案 1 :(得分:10)
以下函数将同时输出语法组的名称和光标所在字符的已翻译语法组:
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)
通过以下突出显示链接l:s
synIDattr(l:s, 'name')
返回与数字语法ID 这将回应如下:
vimMapModKey -> Special
答案 2 :(得分:0)
试试这个:
" 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
"}}}
答案 3 :(得分:0)
这是一个映射,它将显示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>