Eric's Blog 时光荏苒,岁月如梭

实时调整 Neovim 的颜色主题

2024-08-03
Eric Wong

需求背景

如果日常使用 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 后,对应的颜色主题的修改还任然存在。

操作步骤如下:

  1. 将光标移动到需要调色的位置
  2. 使用 :CpickerCursorChangeHighlight 命令调出调色板浮窗,此时调色板默认颜色就是刚刚光标所在位置前景色。
  3. 上下移动光标至对应元素,左右进行调整,此时背景窗口中原先的字段高亮也会跟着变化。
  4. 调整完成后,使用 q 按键关闭调色板浮窗。

到此时已经调整完成,如果重启 Neovim 后,对当前这个主题调整任然会生效。

我录制了一个修改颜色及重启 Neovim 并设定颜色主题的动画:

scrollbar

对于调整过的颜色主题,如果需要清除掉调整,只需要执行:CpickerClearColorPatch 命令。


延生阅读

分享到:

评论

目前只支持使用邮件参与评论。