Как сказал jamessan, вам нужно использовать :exe
для этого. Я нашел общий синтаксис для файлов цветовой схемы немного сложным для управления, поэтому я создал свой собственный, который может вас заинтересовать. Я нахожу его намного более удобным, но вы все равно можете найти его слишком многословным, в котором case см. альтернативу в конце этого ответа.
Вместо того, чтобы писать длинные :hi
строки, вы создаете словарь по строкам:
" Unspecified colours default to NONE, EXCEPT cterm(.*) which default to matching gui(.*)
" ctermfg will default to 'Blue' and ctermbg to 'NONE' if gui(.*) are RGB
"
" In most cases, only GUIFG is therefore important unless support for Black and White
" terminals is essential
let ColourAssignment['Normal'] = {"GUIFG": 'White', "GUIBG": 'Black'}
let ColourAssignment['Comment'] = {"GUIFG": '#00ff00'}
Как упомянуто в комментарии, все неуказанные части имеют разумные значения по умолчанию, поэтому вам не нужно делать общее:
:hi Comment guifg=green ctermfg=green guibg=black ctermfg=black
повторение. Вы также можете (конечно) поместить переменные вместо бита '#00ff00'
, если хотите.
В настоящее время он разработан на основе темных цветовых схем: для светлых цветовых схем он автоматически выбирает соответствующий цвет (в основном, яркие цвета становятся темнее), если вы не переопределите его, но если вы предпочитаете светлые цветовые схемы фона, он не слишком трудно изменить, так что по умолчанию свет.
Другим преимуществом этого является то, что он поставляется с файлом подсветки синтаксиса, который автоматически выделяет бит "ColourAssignment" в выбранном вами цвете.
В любом случае, если вас это что-то интересует, вы можете получить его у здесь .
Альтернативой, которую вы могли бы использовать, было бы создание такой команды:
command! -nargs=+ Hi call CustomHighlighter(<f-args>)
function! CustomHighlighter(name, ...)
let colour_order = ['guifg', 'guibg']
let command = 'hi ' . a:name
if (len(a:000) < 1) || (len(a:000) > (len(colour_order)))
echoerr "No colour or too many colours specified"
else
for i in range(0,len(a:000)-1)
let command .= ' ' . colour_order[i] . '=' . a:000[i]
endfor
exe command
endif
endfunc
Вы можете использовать:
Hi Comment #00ff00
Hi String Yellow
Hi Normal White Black