4

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

我的问题是:

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

我试图创建一个连接到 lightline 的自定义函数。该函数使用system该函数使用vimscript 函数它(没有)工作得很好,除了状态行在每次击键时都会刷新,这会破坏其他所有内容并使 vim 无法使用。system本质上,每次击键时都会使用该函数获取 git 分支......

所以这不是一个可行的解决方案。我“可以”做的是创建一个全局变量,说明是否获取了 git 分支,并防止自定义函数再次获取分支名称(如果已获取)。然后,每次 MacVim 失去焦点时,我都可以再次获取分支名称(不知道如何使用终端 vim 做到这一点)。虽然这并不理想......

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

4

3 回答 3

23

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

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

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

代码很小,你可以在一分钟内阅读。

于 2014-06-10T03:51:27.103 回答
4

是的,使用全局变量是要走的路。

不明显的部分是如何/何时更新该变量的值。一个autocmd似乎是最明显的选择,但迷上了什么事件?BufEnter似乎是一个好的开始。

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

如果您在 Vim 的命令行上执行此操作:!git checkout foo,您可以编写一个以分支名称为参数的命令,以执行正确的 shell 命令一次性更改 的值g:git_branch,甚至无需使用autocmd.

如果您在 Vim 之外执行此操作(<C-z>、、:sh另一个终端窗口或 tmux 窗格、GUI 应用程序……),您将需要找到一种可靠的方法来通知 Vim 该更改使用您的system()调用与autocmd.

于 2014-06-04T08:00:37.927 回答
1

将以下代码写入.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

于 2021-02-22T09:20:19.660 回答