Подтвердить что ты не робот

Узнайте, какая группа подсветки принадлежит определенному ключевому слову/символу в vim

Я прихожу к Vim из TextMate, и я хотел бы настроить мою цветовую схему vim. Было бы очень полезно, если бы я мог узнать, к какой группе (-ам) выделено какое-либо конкретное слово или символ. В TextMate я помещал каретку на рассматриваемое слово/символ, а затем нажимал ctrl-shift-p, и подсказка подсказки показывала бы что-то вроде:

text.html.basic
meta.tag.structure.any.html
string.quoted.double.html

Из этой информации очень просто редактировать текстовую тему TextMate для применения (или удаления) форматирования к рассматриваемому тексту.

В Vim, если я хочу изменить форматирование для определенного слова или символа, я не уверен, с чего начать. Есть ли что-то эквивалентное TextMate ctrl-shift-p?

4b9b3361

Ответ 1

Я не уверен, что понял правильно, но вы ищете это?

" adds to statusline
set laststatus=2
set statusline+=%{synIDattr(synID(line('.'),col('.'),1),'name')}

" a little more informative version of the above
nmap <Leader>sI :call <SID>SynStack()<CR>

function! <SID>SynStack()
    if !exists("*synstack")
        return
    endif
    echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc

Ответ 2

Другой способ получить много информации об подсветке:

map <F3> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">" . " FG:" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"fg#")<CR>

Если я перехожу к комментарию в файле C и нажимаю F3, я получаю:

hi<cCommentStart> trans<cCommentStart> lo<Comment> FG:#00ff00

который показывает, что он находится в группе выделения cCommentStart, которая связана с Comment и окрашена в зеленый цвет (#00ff00). Это (изменено) от здесь, см. Эту страницу для получения дополнительной информации.

Ответ 3

ОБНОВЛЕНИЕ: От :help synID() (см. пример):

synID({line}, {col}, {trans})                           *synID()*
                The result is a Number, which is the syntax ID at the position
                {line} and {col} in the current window.
                The syntax ID can be used with |synIDattr()| and
                |synIDtrans()| to obtain syntax information about text.
                {col} is 1 for the leftmost column, {line} is 1 for the first
                line.
                When {trans} is non-zero, transparent items are reduced to the
                item that they reveal.  This is useful when wanting to know
                the effective color.  When {trans} is zero, the transparent
                item is returned.  This is useful when wanting to know which
                syntax item is effective (e.g. inside parens).
                Warning: This function can be very slow.  Best speed is
                obtained by going through the file in forward direction.

                Example (echoes the name of the syntax item under the cursor):  
                        :echo synIDattr(synID(line("."), col("."), 1), "name")

Насколько я знаю, лучшее, что вы можете сделать, это :syntax, которое даст вам список всех синтаксисов, загруженных для текущего файла. Я ничего не знаю, что даст синтаксический синтаксический анализ текущего буфера.

Обратите внимание, что :syntax просто определяет элементы синтаксиса, он использует команду :highlight, которая дает раскраску для элемента синтаксиса.

Как только вы решите, какие изменения вы хотите сделать, поместите их в ~/.vim/after/syntax/<filetype>.vim. Они будут применяться к вашим изменениям после загрузки файлов синтаксиса по умолчанию.