Как частично "связать" подсветку группы?

Я пытаюсь сделать это на моем .vimrc:

hi link SyntasticErrorLine SignColumn
hi link SyntasticErrorSign SignColumn
hi SyntasticErrorSign guifg=red ctermfg=red

Я хочу иметь SyntasticErrorSign выделение группы с тем же фоном, что и SignColumn но с пользовательскими цветами переднего плана.

Vim Docs говорит:

- Как только вы используете команду ":highlight" для связанной группы, ссылка удаляется.

Итак, то, как я это делаю, в любом случае не сработает, есть ли способ добиться этого?

3 ответа

Решение

@Kent ответ был хорошим, но, похоже, проблема в synIDattr когда кто-то не проходит mode аргумент, он не может вернуть атрибут в режиме графического интерфейса (gvim). Я узнал об этом из источников плагинов vim-arline.

Я решил свою проблему с:

hi link SyntasticErrorLine SignColumn

exec 'hi SyntasticErrorSign guifg=red ctermfg=red' .
            \' guibg=' . synIDattr(synIDtrans(hlID('SignColumn')), 'bg', 'gui') .
            \' ctermbg=' . synIDattr(synIDtrans(hlID('SignColumn')), 'bg', 'cterm')

Если вы хотите "украсть" какое-либо значение атрибута hl из другой группы, вам не нужно link, вы просто получаете значение для собственного использования.

Для вашей проблемы попробуйте добавить эту строку в ваш файл.vimrc.

exec 'hi SyntasticErrorSign guifg=red ctermfg=red ' . (has("gui_running")? 'guibg=':'ctermbg=') . synIDattr(hlID('SignColumn'),'bg')

Линия устанавливает fg(gui and cterm) из SyntasticErrorSign группа как redи использует тот же цвет bg группы SignColumn, зависит от вас в gvim или же vim, Я думаю, что это должно быть то, что вы ищете.

Для этих функций вы могли бы просто :h xxx() получить подробную информацию.

Это делает то, что вы хотите:

hi SyntasticErrorSign guifg=red ctermfg=red
hi! link SyntasticErrorSign SignColumn

! принудительно устанавливает ссылку, даже если у вас уже есть атрибуты, установленные в группе выделения.

Другие вопросы по тегам