Ответ 1
Как сказал jamessan, для этого нужно использовать :exe
. Я обнаружил, что общий синтаксис для файлов цветовой схемы несколько сложнее в управлении, поэтому я сделал свой собственный, что вас может заинтересовать. Я нахожу его гораздо более удобным для обслуживания, но вы все равно можете найти его слишком многословным, рассмотрите альтернативу в конце этого ответа.
Вместо того, чтобы писать длинные строки :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