Я хотел бы убрать свой файл цветовой схемы Vim путем замены цветов #ABCDEF переменными. Например, я хотел бы заменить это:
highlight String guifg=#61CE3C
highlight Identifier guifg=#61CE3C
highlight Type guifg=#84A7C1
с чем-то вроде этого (псевдокодируют vimscript):
my_string =#61CE3C
my_type =#84A7C1
highlight String guifg=my_string
highlight Identifier guifg=my_string
highlight Type guifg=my_type
Я не был уверен, полагает ли vimscript, что шестнадцатеричный цвет строка или шестнадцатеричное число. По-видимому, это - строка, вызовите, это, кажется, работает:
:highlight Normal guifg='#ffffff'
Таким образом, я думал, что попробую это:
:let my_color='#ffffff'
:highlight Normal guifg=my_color
Но это дает ошибку "E254: не Может выделить цвет my_color". Кто-либо может предложить способ сделать эту работу?
Как сказал Джамессан, для этого нужно использовать :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'
.
В настоящее время он спроектирован вокруг тёмных цветовых схем фона: для светлых цветовых схем фона он автоматически выбирает подходящий цвет (в основном, он делает светлые цвета тёмнее), если только вы не переопределите его, но если вы предпочитаете светлые цветовые схемы фона, то изменить их не составит труда, так что по умолчанию будет светло.
Другое преимущество заключается в том, что он поставляется с файлом подсветки синтаксиса, который автоматически подсвечивает бит "Присвоение цвета" в выбранном вами цвете.
В любом случае, если вас это интересует, вы можете получить его из здесь .
Альтернативой, которую вы можете использовать, было бы создание такой команды:
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
Начиная с : highlight
не принимает переменную как аргумент, вы должны создать команду, которая будет запускаться как выражение, а затем вычислить ее с помощью команды : execute .
:let my_color='#ffffff'
:exe 'highlight Normal guifg=' . my_color