问题描述
vim版本:7.4(在8以上版本,似乎没有问题),操作系统是centos7,在某些情况下,statusline被删除了,展示了默认的。
正常应该是这样的:
workround
1、vimrc有一句 set backgroud=dark,只有我注释掉此行,statusline就可以正确展示(但是,注释掉,打开vim会闪烁一下,我用的solarized colorscheme)。
2、注释掉插件 vim-fugitive,也可以解决问题。
原理
我想弄明白,到底是什么原因导致的问题,借此机会,学习一下vim plug的原理,这里记录一下调查问题的过程。
我搜索了github,发现有人已经会报了类似的问题:
https://github.com/tpope/vim-fugitive/issues/2000#issuecomment-1133665756
https://github.com/vim-airline/vim-airline/issues/2537
看起来跟我遇到的问题一模一样,并且,作者说已经做了一下修复:
https://github.com/tpope/vim-fugitive/commit/ad16275775ae9e11b8d5491a4cd893a12f32f241#diff-79618f4d459310b3eee3132d337abd2488119341afa5b70489cc62ce05d9ae64
我用的是最新的代码,好像还是有问题。
问题复现
1、FugitiveHead函数有问题,
进而 vim-airline/autoload/airline/extensions/branch.vm中 s:config_fugitive_branch函数有问题。
2、进一步定位到 s:vcs_config 这个定义里的 's:update_git_branch' 有问题。
3、进一步调查,步骤2的调查方向错了,其实步骤1里面FugitiveHead抛出了异常,但是诡异的是,抛完异常又继续往下运行了(所以调查问题不错调查了)。
4、找到一个关键点,只要给b:git_dir复制为'',就会报错。后面的函数调用并没有抛异常。
5、进一步定位到这里出了问题