如何将Vim7.4的C语法高亮颜色迁移到Vim8并让自定义高亮设置持久生效?
如何将Vim7.4的C语法高亮颜色迁移到Vim8并让自定义高亮设置持久生效?
哥们,我之前也碰到过Vim版本升级后语法高亮乱掉的问题,你的情况大概率是自定义高亮的执行时机不对——Vim8加载语法文件的顺序和7.4有差异,你用BufWinEnter触发的命令可能在默认语法高亮加载前就跑了,后面直接被覆盖掉了,所以手动执行有用,但打开新文件就失效。给你几个靠谱的解决办法:
方法一:调整AutoCmd的触发事件
把原来的BufWinEnter换成FileType或者Syntax事件,这两个事件会在Vim确定文件类型、加载完对应语法高亮后再触发,你的设置就不会被覆盖了。
把你~/.vimrc里的命令改成下面任意一种都可以:
# 针对C/C++头文件的文件类型触发 au FileType c,h highlight Constant ctermfg=9
或者更精准的,等C语法高亮完全加载完成后再应用:
au Syntax c highlight Constant ctermfg=9
方法二:用Vim的after目录(最推荐)
这是Vim官方推崇的自定义语法高亮方式,完全不用纠结加载顺序的问题,步骤也很简单:
- 先创建对应的目录(如果没的话):
mkdir -p ~/.vim/after/syntax - 在这个目录下新建
c.vim文件,把你所有需要自定义的高亮命令直接写进去,比如:highlight Constant ctermfg=9 highlight Statement ctermfg=12 # 比如你还想改语句的颜色 highlight Comment ctermfg=3 # 注释的颜色
以后Vim每次加载完默认的C语法高亮后,都会自动加载这个c.vim里的设置,绝对会生效,而且把所有C语言的自定义高亮都集中在这里,管理起来也方便。
额外小提醒
虽然你说手动执行命令有效,但还是可以顺手确认一下:在Vim7.4里运行:hi命令,把C相关的高亮组名称和配置记下来,对比Vim8里的:hi输出,确保你修改的是同一个高亮组——毕竟极少数情况下,版本升级可能会调整部分高亮组的命名。
备注:内容来源于stack exchange,提问作者Ani
相关产品推荐
相关产品推荐

