Vim:在没有逃犯的情况下在灯线状态行中显示当前git分支

时间:2014-06-04 07:41:57

标签: git vim vim-fugitive

我正在使用lightline.vim,我想展示当前的git分支。目前,我正在使用vim-fugitive这样做,但是,除了在状态行中显示git分支外,我根本不使用此插件。

我的问题是:

有没有办法在不使用逃犯的情况下在状态行中显示git分支?

我试图创建一个我挂钩到lightline的自定义函数。该函数使用system vimscript函数获取当前git分支。它(没有)工作得很好,除了状态行在每次击键时刷新,这打破了其他一切并使vim无法使用。基本上,git分支是在每次按键时使用system函数获取的......

因此,这不是一个可行的解决方案。我能做什么" do,是创建一个全局变量,表示是否获取了git分支,并阻止自定义函数再次获取分支名称(如果已经获取)。然后每次MacVim失去焦点时我都可以再次获取分支名称(不知道如何使用终端vim进行此操作)。虽然这不太理想......

有关如何解决这个问题的任何想法吗?

3 个答案:

答案 0 :(得分:9)

我创建了一个专注于你想要的功能的插件。

https://github.com/itchyny/vim-gitbranch

您可以通过gitbranch#name()函数获取分支名称。

代码非常小,您可以在一分钟内阅读。

答案 1 :(得分:3)

是的,使用全局变量是可行的方法。

非显而易见的部分是如何/何时更新该变量的值。 autocmd似乎是最明显的选择,但却吸引了什么事件? BufEnter似乎是一个好的开始。

现在,由于你不使用逃犯,你如何切换分支?在Vim之外?在Vim的命令行上?

如果在Vim的命令行:!git checkout foo上执行此操作,则可以编写一个命令,该命令将分支名称作为参数来执行正确的shell命令更改{J} {1}}的价值,甚至不使用g:git_branch

如果你在Vim之外(autocmd<C-z>,另一个终端窗口或tmux窗格,一个GUI应用程序......),你需要找到一个可靠的方法来通知Vim这个改变< em>或使用:sh来调用system()

答案 2 :(得分:0)

将后面的代码写入.vimrc。

    let gitBranch=system("git rev-parse --abbrev-ref HEAD")
    set laststatus=2
    set statusline=%F%m%r%h%w\ [POS=%04l,%04v]\ [%p%%]\ [LEN=%L]
    execute "set statusline +=" . gitBranch