Как получить название группы подсветки под курсором в vim? - PullRequest
12 голосов
/ 27 февраля 2012

Я обычно настраиваю существующие colorscheme в соответствии со своими потребностями.

Если бы я мог получить имя группы синтаксиса под курсором, это бы мне очень помогло, точно так же как Firebug , но в Vim.Я хотел бы знать, как это сделать.

Ответы [ 3 ]

19 голосов
/ 27 февраля 2012

Когда я делал то же самое, в интернете была эта функция:

function! SynStack()
  if !exists("*synstack")
    return
  endif
  echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc
10 голосов
/ 05 мая 2016

Следующая функция выведет как имя группы синтаксиса, так и переведенную группу синтаксиса символа, на котором находится курсор:

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') возвращает имя, соответствующее числовому идентификатору синтаксиса

Это будет эхочто-то вроде:

vimMapModKey -> Special
0 голосов
/ 01 июля 2012

Попробуйте это:

" 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
"}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...