Я обычно настраиваю существующий colorscheme
для удовлетворения моих потребностей.
Если бы я мог получить имя группы синтаксиса под курсором, это мне очень помогло бы, как Firebug, но в Vim. Я хотел бы знать, как это сделать.
Я обычно настраиваю существующий colorscheme
для удовлетворения моих потребностей.
Если бы я мог получить имя группы синтаксиса под курсором, это мне очень помогло бы, как Firebug, но в 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(...)
возвращает числовой идентификатор синтаксисаsynIDtrans(l:s)
преобразует числовой идентификатор синтаксиса l:s
, следуя выделенным ссылкамsynIDattr(l:s, 'name')
возвращает имя, соответствующее цифровому идентификатору синтаксисаЭто будет звучать примерно так:
vimMapModKey -> Special
Попробуйте следующее:
" 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
"}}}
Здесь отображение, которое покажет иерархию 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>