Как определить свои собственные цвета выделения для использования с matchadd() в vim?

Недавно я нашел эту небольшую часть кода для моего .vimrc

if has("autocmd")
  " Highlight TODO, FIXME, NOTE, etc.
  if v:version > 701
    autocmd Syntax * call matchadd('Todo',  '\W\zs\(TODO\|FIXME\|CHANGED\|XXX\|BUG\|HACK\)')
    autocmd Syntax * call matchadd('Debug', '\W\zs\(NOTE\|INFO\|IDEA\)')
  endif
endif

По сути, это позволяет мне определять ключевые слова, которые соответствуют разным выделениям (Todo и Debug — это названия цветов).

Есть ли способ, которым я могу определить свои собственные схемы окраски и дать им имена? В частности, я хочу иметь 3 тега: TODO1, TODO2 и TODO3. Идея состоит в том, что TODO3 имеет более низкий приоритет, чем TODO1, и поэтому выделяется более светлым оттенком.

Если я не могу определить свой собственный цвет, где я могу найти список названий цветов, которые я могу использовать?


person David Tuite    schedule 04.08.2011    source источник
comment
Я ответил на аналогичный вопрос, который мог бы помочь вам. В основном он говорит вам, как определить ваши собственные совпадающие цвета (помимо любой цветовой схемы, которую вы используете): ="подсветка синтаксиса vim"> stackoverflow.com/questions/6386085/vim-syntax-highlighting/   -  person alfredodeza    schedule 04.08.2011


Ответы (1)


Если вы не хотите использовать цвета темы по умолчанию, вот решение:

" Define autocmd for some highlighting *before* the colorscheme is loaded
augroup VimrcColors
au!
  autocmd ColorScheme * highlight ExtraWhitespace ctermbg=darkgreen guibg=#444444
  autocmd ColorScheme * highlight Tab             ctermbg=darkblue  guibg=darkblue
augroup END

И позже (это должно быть после):

" Load color scheme
colorscheme yourscheme

Определения цвета следуют следующему формату:

autocmd ColorScheme * highlight <ColorName> ctermbg=<TerminalBackgroundColour> guibg=<GuiBackgroundColour> ctermfg=<TerminalFontColor> guifg=<GuiFontColour>

Где cterm цвета должны быть взяты из предопределенного списка (см. :help cterm-colors для получения дополнительной информации). Цвета графического интерфейса могут быть любыми шестнадцатеричными цветами.

person Plouff    schedule 07.09.2011
comment
Ваш if !exists('var') | let var=1 | ... | endif естественно выражается augroup vimrcColors | autocmd! | ... | augroup END. Преимущество этого заключается в том, что вам не нужно разблокировать переменную и удалять автокоманды вручную, чтобы перезагрузить их. - person ZyX; 07.09.2011
comment
Спасибо за совет. Я видел это однажды, но я не получил преимущества. Я собираюсь попробовать! - person Plouff; 08.09.2011
comment
@Plouff, огромное спасибо за ответ. Возможно, вы могли бы отредактировать с предложением ZyX? Я не очень понимаю, что он имеет в виду. - person David Tuite; 15.09.2011
comment
Привет, рад что помогло! Я обновил решение с комментарием ZyX. Таким образом, код должен быть более чистым. Спасибо еще раз - person Plouff; 15.09.2011
comment
Я обновил решение еще раз, так как забыл удалить назначение переменной... Это должен быть окончательный ответ. - person Plouff; 16.09.2011