2009-08-25 3 views
4

Если у меня есть существующее выделение группа в Vim через ссылку, напримерКак изменить существующую группу выделения в vim?

hi link my_highlight_group my_default_color 

Можно ли добавить «жирные», чтобы my_highlight_group без изменения my_default_color? После не работает:

hi my_highlight_group gui=bold 

Удивительно, но я могу добавить полужирный, если my_highlight группа определяется непосредственно (не через ссылку):

hi my_highlight_group guifg=#F0000 
hi my_highlight_group gui=bold 

ответ

9

как «слишком много PHP» сказал, что нет прямого способа сказать «создать значение, похожее на это, и добавить жирный шрифт». Лучший способ - изменить цветовую схему. Если вы не используете настраиваемую цветовую схему, скопируйте ее из основного каталога установки vim в каталог ~/.vim/colors и отредактируйте его в соответствии с вашими потребностями. Кроме того, выполните поиск на странице скриптов vim и попробуйте некоторые из доступных.

Бесстыдная штепсельная вилка: если вы хотите, чтобы это было легче редактировать, чем в стандартном формате, попробуйте мой "Bandit" colour scheme.

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

:autocmd ColorScheme AddBoldToGroup my_highlight_group 

Сценария во все его масштабность находится ниже. Насколько мне известно, нет более быстрого способа сделать это! Очевидно, вы могли бы сэкономить несколько строк, написав менее подробный код, но общая идея использования redir и silent hi - это единственный способ.

" Call this with something like 
" 
" :AddBoldToGroup perlRepeat 
" 
command! -complete=highlight -nargs=1 AddBoldToGroup call AddBoldToGroup(<f-args>) 
function! AddBoldToGroup(group) 
    " Redirect the output of the "hi" command into a variable 
    " and find the highlighting 
    redir => GroupDetails 
    exe "silent hi " . a:group 
    redir END 

    " Resolve linked groups to find the root highlighting scheme 
    while GroupDetails =~ "links to" 
     let index = stridx(GroupDetails, "links to") + len("links to") 
     let LinkedGroup = strpart(GroupDetails, index + 1) 
     redir => GroupDetails 
     exe "silent hi " . LinkedGroup 
     redir END 
    endwhile 

    " Extract the highlighting details (the bit after "xxx") 
    let MatchGroups = matchlist(GroupDetails, '\<xxx\>\s\+\(.*\)') 
    let ExistingHighlight = MatchGroups[1] 

    " Check whether there's an existing gui= block 
    let MatchGroups = matchlist(ExistingHighlight, '^\(.\{-}\) gui=\([^ ]\+\)\(.\{-}\)\?$') 
    if MatchGroups != [] 
     " If there is, check whether "bold" is already in it 
     let StartHighlight = MatchGroups[1] 
     let GuiHighlight = MatchGroups[2] 
     let EndHighlight = MatchGroups[3] 
     if GuiHighlight =~ '.*bold.*' 
      " Already done 
      return 
     endif 
     " Add "bold" to the gui block 
     let GuiHighlight .= ',bold' 
     let NewHighlight = StartHighlight . GuiHighlight . EndHighlight 
    else 
     " If there's no GUI block, just add one with bold in it 
     let NewHighlight = ExistingHighlight . " gui=bold" 
    endif 

    " Create the highlighting group 
    exe "hi " . a:group . " " NewHighlight 
endfunction 
+0

Shameless вилка: Если вы не хотите, чтобы скопировать все colorschemes в вашу .vim папку [плагин] (http://www.vim.org/scripts/script.php?script_id=1641) позволяет вносить небольшие настройки в .vim/after/colors. И Браво для публикации этого кода, я бы дал вам +4, если бы мог. –

+0

@too much php: Этот плагин выглядит хорошо, спасибо за ссылку (и за Bravo!) – DrAl

+0

Добавьте этот код перед этой строкой: «Извлеките детали подсветки (бит после« xxx ») (Нацисты проигнорировали мое редактирование по какой-то причине, и они неправильны. Вам нужен этот код, иначе регулярное выражение не будет работать так, как ожидалось, если verbose включен): «Вывод подсветки в режиме подсвечивания, см.: help highlight-verbose if & verbose let GroupDetails = substitute (GroupDetails, '\ s \ + \ Last set from \ _. *', '', 'G') endif – FocusedWolf

0

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

2

Изменение атрибутов группы, которая связана с другой, отключит связь. AFAIK нет простого способа скопировать цвета с my_default_color в my_highlight_group. Вам просто нужно скопировать значения цвета вручную.

Это не должно быть большой проблемой, хотя, вы должны иметь все ваши ВЫСВЕТИТЬ группы, определенные в файле ColorScheme, так просто поставить эти два рядом друг с другом:

hi my_default_color guifg=#000088 
hi my_highlight_group guifg=#000088 gui=bold 
Смежные вопросы