我在很多机器上使用相同的vimrc,其中一些机器安装了fugitive.vim,有些机器没有,我喜欢在我的状态行中包含fugitive#statusline(),但在没有安装插件的机器上这会引发一个错误。
在调用set statusline之前,有没有办法检查这个函数是否存在?我尝试过使用existsy,但由于某种原因(加载顺序?)
if exists("*fugitive#statusline")
set statusline=%<\ %f\ %{fugitive#statusline()} ... (other stuff)
endif我还尝试通过在命令前面加上silent!来消除错误,但似乎也不起作用。
发布于 2011-05-13 11:01:10
这是一条捷径:
set statusline+=%{exists('g:loaded_fugitive')?fugitive#statusline():''}发布于 2013-12-09 22:35:59
由于逃犯没有在autoload目录中定义fugitive#statusline,很遗憾不能使用silent! call / exists技术来嗅探它(谢谢你@Christopher)。然而,有一些替代方案:
'statusline'选项中添加一个三元分支。after/plugin文件中设置'statusline',就像@Christopher建议的那样。这解决了问题,但这意味着你的状态线是在一个不太可能的地方定义的,所以最好在你的~/.vimrc文件中添加一个好的注释。~/.vimrc文件中定义函数。示例:
if !exists('*fugitive#statusline')
function! fugitive#statusline()
return ''
endfunction
endifFugitive autocmd事件。请注意,这将仅在Fugitive检测到git目录时触发。在您的~/.vimrc文件中放入如下内容:
augroup fugitive_status
autocmd!
autocmd user Fugitive set statusline=%<\ %f\ %{fugitive#statusline()} ...
augroup END我个人认为@tungd解决方案是最简单的。不过,我的下一个选择就是定义一个伪函数。如果安装了逃犯,逃犯将覆盖它。最好的部分是这让你的'statusline'选项保持整洁。
发布于 2013-12-05 10:54:57
我想我已经找到了实现这一点的方法。检查是否存在fugitive#statusline()需要在加载插件之后进行。在此之前,不会加载任何与逃逸相关的变量或函数。
在$VIMRUNTIME/after/plugin路径中添加此代码文件:
" $VIMRUNTIME/after/plugin/fugitive-statusline.vim
if has("statusline") && exists('*fugitive#statusline')
" git fugitive statusline
set statusline=%<%f\ %h%m%r%{fugitive#statusline()}%=%-14.(%l,%c%V%)\ %P
" show statusline always
set laststatus=2
" turn off ruler
set noruler
endifhttps://stackoverflow.com/questions/5983906
复制相似问题