首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vim:在vimrc中有条件地使用fugitive#statusline函数

Vim:在vimrc中有条件地使用fugitive#statusline函数
EN

Stack Overflow用户
提问于 2011-05-13 04:14:11
回答 4查看 7K关注 0票数 7

我在很多机器上使用相同的vimrc,其中一些机器安装了fugitive.vim,有些机器没有,我喜欢在我的状态行中包含fugitive#statusline(),但在没有安装插件的机器上这会引发一个错误。

在调用set statusline之前,有没有办法检查这个函数是否存在?我尝试过使用existsy,但由于某种原因(加载顺序?)

代码语言:javascript
复制
if exists("*fugitive#statusline")
  set statusline=%<\ %f\ %{fugitive#statusline()} ... (other stuff)
endif

我还尝试通过在命令前面加上silent!来消除错误,但似乎也不起作用。

EN

回答 4

Stack Overflow用户

发布于 2011-05-13 11:01:10

这是一条捷径:

代码语言:javascript
复制
set statusline+=%{exists('g:loaded_fugitive')?fugitive#statusline():''}
票数 10
EN

Stack Overflow用户

发布于 2013-12-09 22:35:59

由于逃犯没有在autoload目录中定义fugitive#statusline,很遗憾不能使用silent! call / exists技术来嗅探它(谢谢你@Christopher)。然而,有一些替代方案:

  • 按照@tungd的建议在'statusline'选项中添加一个三元分支。
  • after/plugin文件中设置'statusline',就像@Christopher建议的那样。这解决了问题,但这意味着你的状态线是在一个不太可能的地方定义的,所以最好在你的~/.vimrc文件中添加一个好的注释。
  • 只需在你的~/.vimrc文件中定义函数。

示例:

代码语言:javascript
复制
if !exists('*fugitive#statusline')
  function! fugitive#statusline()
      return ''
  endfunction
endif

  • 另一个选择是使用Fugitive定义的Fugitive autocmd事件。请注意,这将仅在Fugitive检测到git目录时触发。

在您的~/.vimrc文件中放入如下内容:

代码语言:javascript
复制
augroup fugitive_status
  autocmd!
  autocmd user Fugitive set statusline=%<\ %f\ %{fugitive#statusline()} ...
augroup END

我个人认为@tungd解决方案是最简单的。不过,我的下一个选择就是定义一个伪函数。如果安装了逃犯,逃犯将覆盖它。最好的部分是这让你的'statusline'选项保持整洁。

票数 8
EN

Stack Overflow用户

发布于 2013-12-05 10:54:57

我想我已经找到了实现这一点的方法。检查是否存在fugitive#statusline()需要在加载插件之后进行。在此之前,不会加载任何与逃逸相关的变量或函数。

$VIMRUNTIME/after/plugin路径中添加此代码文件:

代码语言:javascript
复制
" $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
endif
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5983906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档