需求背景
如果日常使用 Neovim 较多的话,选择一个喜欢的颜色主题还是非常不错的。Github 上面有很多 Neovim 主题插件。 但是在使用过程中会遇到这样情况,比如:“我觉得这个主题某个字段高亮颜色看着不喜欢,想做一个微调”。 一般遇到这种情况大多数人会 Fork 仓库进行修改,或者在配置文件设定主题后方进行覆盖。
早期功能实现
以上的这个功能需求,其实很久以前就有了,早期我的解决方法非常简单, 有两种:
在主题设定后方直接修改
早期的配置文件比较简单,我都是在主题设定后方直接修改的,比如:
colorschem one
hi VertSplit guibg=#282828 guifg=#181A1F
这种修改方式也存在弊端,就是在启动 Neovim 后,如果执行 :colorscheme
命令切换主题,那配置文件中的微调将不再生效。
使用 ColorScheme
事件调用覆写函数。
autocmd ColorScheme * call s:fix_colorscheme()
function! s:fix_colorscheme()
" 使用 g:colors_name 判断主题名称
" 再此使用 highlight 命令修改高亮组
endfunction
这就解决了前面提到的切换主题后不再生效的问题。但是调整的过着无法在 Vim 里面完成,可能需要借助外部的调色板,调整好后把 hex 值写进配置文件。
使用 cpicker.nvim 实时调色
前面介绍过我的 cpicker.nvim 插件,随着这个插件做出来后,借助它的调色板,又实现了一个实时调整高亮组的功能。并且,调整的结果会存住下来。 重启 Neovim 后,对应的颜色主题的修改还任然存在。
操作步骤如下:
- 将光标移动到需要调色的位置
- 使用
:CpickerCursorChangeHighlight
命令调出调色板浮窗,此时调色板默认颜色就是刚刚光标所在位置前景色。 - 上下移动光标至对应元素,左右进行调整,此时背景窗口中原先的字段高亮也会跟着变化。
- 调整完成后,使用
q
按键关闭调色板浮窗。
到此时已经调整完成,如果重启 Neovim 后,对当前这个主题调整任然会生效。
我录制了一个修改颜色及重启 Neovim 并设定颜色主题的动画:
对于调整过的颜色主题,如果需要清除掉调整,只需要执行:CpickerClearColorPatch
命令。