1

Я создаю цветовую схему для vim и хочу дать различные цвета if и endif .

Я следовал руководству по vimcasts и получил следующий файл

"set 256 colors for gnome-terminal
if $COLORTERM == 'gnome-terminal'
    set t_Co=256
endif
set background=dark
highlight clear
if exists("syntax_on")
    syntax reset
endif
let g:colors_name = "my_color_scheme"

highlight guibg=#110117 ctermbg=233
highlight vimcommand guifg=#6792db ctermfg=68 guibg=NONE
highlight link number vimstring
highlight vimnotfunc guifg=#e6b13e ctermfg=179 guibg=NONE

Последние строки изменяют цвет if но не endif .

Я использовал фрагмент, чтобы найти название синтаксиса

" Show syntax highlighting groups for word under cursor
nmap <C-S-P> :call <SID>SynStack()<CR>
function! <SID>SynStack()
  if !exists("*synstack")
     return
  endif
  echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc 

Он показывает ['vimIsCommand', 'vimCommand'] . Установка цвета fg для любого из них, кажется, не меняет подсветку.

Как я могу найти правильное название группы?

1 ответ1

0

Во-первых, схема цветов просто обеспечивает сопоставление (в основном общих) групп подсветки с определенными цветами и текстовыми атрибутами. Синтаксический скрипт предоставляет правила синтаксического анализа для определения элементов синтаксиса. Эти синтаксические группы (например, vimCommand) затем связываются с общими группами подсветки (такими как Statement).

Хотя пользовательская цветовая схема действительно может обеспечить специальный цвет, скажем, для vimCommand , это необычно. Вы можете сделать это в своей собственной схеме цветов, но вы также можете выполнить :hi link ... override в вашем ~/.vimrc .

В любом случае вы можете назначать отдельные цвета только отдельным группам синтаксиса.

SyntaxAttr.vim - Показать атрибуты подсветки синтаксиса символа под плагином курсора аналогичен фрагменту в вашем вопросе. С его помощью и просмотром определения синтаксиса в $VIMRUNTIME/syntax/vim.vim я вижу, что if принадлежит группе vimNotFunc (вместе с elseif , return и while), тогда как endif помещается вместе со всеми командами Vimscript в vimCommand . Таким образом, любое изменение цвета также повлияет на многие другие команды, что может не соответствовать вашим ожиданиям.

Чтобы это исправить, вам нужно настроить сами правила синтаксиса, определив команды переопределения :syntax и поместив их в ~/.vim/after/syntax/vim.vim . Это возможно, но утомительно (особенно если учесть, что вам может понадобиться то же самое и для других языков). Я бы предпочел пересмотреть, не живете ли вы с предопределенными группировками.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .