Расширение группы подсветки в Vim - PullRequest
3 голосов
/ 02 марта 2011

Я хочу создать имя группы Italic, которое точно так же, как Normal но с текстом курсивом. Моя группа Normal установлен на

Normal   ctermfg=251 ctermbg=234 guifg=#cccccc guibg=#242424

Мои вопросы:

  1. Правильный способ сделать это - добавить term=italic к настройкам следующим образом

    hi Italic term=italic ctermfg=251 ctermbg=234 guifg=#cccccc guibg=#242424
    
  2. Я хочу сделать это в общем виде, то есть я хочу определить Italic так, чтобы настройка работала для всех colorscheme (выше будет работать только для моего конкретного Цветовая схема). Есть ли способ сделать это? что-то вроде

    hi Italic extends Normal term=italic 
    

1 Ответ

4 голосов
/ 11 мая 2011

Чтобы решить эту проблему, вы можете создать группу подсветки по сценарию. Функция ниже принимает три строковых аргумента: имя группы к базе выделение, имя создаваемой группы и строка, содержащая дополнительные свойства выделения (или свойства для перезаписи).

function! ExtendHighlight(base, group, add)
    redir => basehi
    sil! exe 'highlight' a:base
    redir END
    let grphi = split(basehi, '\n')[0]
    let grphi = substitute(grphi, '^'.a:base.'\s\+xxx', '', '')
    sil exe 'highlight' a:group grphi a:add
endfunction

Таким образом, вызов

:call ExtendHighlight('Normal', 'Italic', 'term=italic')

создает новую группу с именем Italic, которая расширяет Normal выделением term=italic строка атрибута.

Обратите внимание, что пользовательские группы подсветки остаются неизменными в цветовой схеме. переключение. Чтобы исправить это поведение, вы можете обновить группу, когда текущий изменения цветовой схемы.

:autocmd ColorScheme * call ExtendHighlight('Normal', 'Italic', 'term=italic')
...