0

我正在破解 vim 的lightline插件(下载版本)。我可以修改每个主题的颜色。我做了一些在 powerline.vim 方案中运行良好的事情(路径~/.vim/pack/plugins/start/lightline/autoload/lightline/colorscheme/powerline.vim:)

现在我希望在 vim 中改变颜色主题。我在 powerline.vim 的开头添加了这段代码:

10    let s:BSsplitscolor = "'darkestgreen', 'brightgreen'"
11    if g:BSsplitsbool == "1"
12            let s:BSsplitscolor = "'gray4', 'brightorange'"
13    endif
14
15    " ============================== NOTE: below : already there
16
17    let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
18    let s:p.normal.left = [ [s:BSsplitscolor, 'bold'], ['white', 'gray4'] ]

这里s:BSsplitscolor包含我想要的颜色:'gray4', 'brightorange'如果g:BSsplitsbool相等1'darkestgreen', 'brightgreen'不相等。就是g:BSsplitsbool这样的变化。

现在问题出在第 16 行:当我添加s:BSsplitscolorafter[ [时,当我重新启动 vim 时出现这些错误(从法语翻译):

    Error detected while treating functionlightline#update[5]..lightline#colorscheme[18]..lightline#highlight :
    line   18 :
    E254: can not allocate color darkestgreen
    E416: missing '=' : , 'brightgreen' guibg=bold ctermfg=0 ctermbg=0
    Error detected while treating function lightline#update :
    line    5 :
    E171: missing :endif

我想我遗漏了一些东西......我不太擅长 vim 脚本:我可以做一个 if 指令,重新映射,仅此而已。

4

1 回答 1

0

一、解决办法:

let s:BSsplitscolor = ['darkestgreen', 'brightgreen']
[...]
let s:p.normal.left = [ s:BSsplitscolor + ['bold'], ['white', 'gray4'] ]

二、解释:

您正在尝试构建包含三个项目的列表:

['darkestgreen', 'brightgreen', 'bold']

从一个看起来像列表的字符串中:

"'darkestgreen', 'brightgreen'"

和一个带有单个字符串的列表:

['bold']

通过在该列表中插入该字符串:

[ s:BSsplitscolor, 'bold']

这给了你这个怪物:

['''darkestgreen'', ''brightgreen''', 'bold']

这是一个包含两个项目的列表,根本不是你想要构建的。我不知道可以预期类似的脚本语言可以工作。

实际的解决方案是s:BSsplitscolor列出一个清单:

let s:BSsplitscolor = ['darkestgreen', 'brightgreen']

并将其与['bold']. 这可以通过多种方式完成。与:help expr-+

let s:p.normal.left = [ s:BSsplitscolor + ['bold'], ['white', 'gray4'] ]

或与:help extend()

let s:p.normal.left = [ extend(s:BSsplitscolor, ['bold']), ['white', 'gray4'] ]
于 2020-07-02T13:37:01.377 回答