vim - 如何分配在vim(lightline插件)中执行时更改的值?
问题描述
我正在破解 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:BSsplitscolor
after[ [
时,当我重新启动 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 指令,重新映射,仅此而已。
解决方案
一、解决办法:
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'] ]
推荐阅读
- ios - 如何在 Xcode 中创建两个静态库,其中一个依赖于另一个?
- reactjs - handleSubmit 功能在 React 的功能组件中不起作用
- javascript - 使用 export default 的 npm 包不是函数错误
- go - 为什么我的范围在切片中显示不存在的值?
- linux - flutter create命令尝试访问根目录失败
- machine-learning - 将 Ray-Tune 与 sklearn 的 RandomForestClassifier 结合使用
- web-hosting - 一个数据库中的多域
- apache-spark - 在所有 spark executors 和 Driver 上执行脚本或小函数,而不使用 DataFrame 或 RDD
- python - 与复数相关的点积
- c++ - 在其他文件中创建时,类在 c++ 项目中不起作用