在vim中定义颜色变量

Roo*_*ook 5 vim

例如,当制作colorscheme时,如何将#40ffff定义为"UglyColor"(即作为变量)?

可能/不可能吗?

DrA*_*rAl 6

使用内置语法是不可能的.但是,如果您使用自己的语法,则可以执行以下操作:

let UglyColor = '#40ffff'
let Greenish  = '#00dd00'
let MyStyle   = 'bold'
exe 'hi Keyword gui=' . MyStyle . ' guifg=' . UglyColor
exe 'hi Comment guifg=' . Greenish
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过创建字典来进一步:

let UglyColor = '#40ffff'
let Greenish  = '#00dd00'
let ColourAssignment = {}
let ColourAssignment['Keyword'] = {"GUIFG": UglyColor, "GUI": "Bold"}
let ColourAssignment['Comment'] = {"GUIFG": Greenish}
Run Code Online (Sandbox Code Playgroud)

然后使用以下内容处理它:

for key in keys(ColourAssignment)
    let s:colours = ColourAssignment[key]
    if has_key(s:colours, 'GUI')
        let gui = s:colours['GUI']
    else
        let gui='NONE'
    endif
    if has_key(s:colours, 'GUIFG')
        let guifg = s:colours['GUIFG']
    else
        let guifg='NONE'
    endif
    if has_key(s:colours, 'GUIBG')
        let guibg = s:colours['GUIBG']
    else
        let guibg='NONE'
    endif
    if key =~ '^\k*$'
        execute "hi ".key." term=".term." cterm=".cterm." gui=".gui." ctermfg=".ctermfg." guifg=".guifg." ctermbg=".ctermbg." guibg=".guibg." guisp=".guisp
    endif
Run Code Online (Sandbox Code Playgroud)

这就是我的Bandit配色方案的工作原理(在那里有更多的逻辑用于自动生成cterm颜色,浅色背景颜色和语法文件,以便颜色方案自我突出显示).随意看看那个并窃取您自己的配色方案的功能和格式.