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

Rob*_*udi 2 git vim vim-fugitive

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

我的问题是:

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

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

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

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

itc*_*yny 9

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

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

您可以按gitbranch#name()功能获取分支名称.

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


rom*_*inl 4

是的,使用全局变量是正确的方法。

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n

  • Fugitive 不会更新 lightline:fugitive 公开一个检索和缓存分支名称的函数,然后在 lightline 中使用该函数。你可以在 lightline 的文档中看到它是如何完成的(https://github.com/itchyny/lightline.vim/blob/master/doc/lightline.txt#L800)。解析“system('gitbranch')”的输出来更新全局(或者更好的是,缓冲区本地)变量*是*最实用的解决方案。在这里,找到更新该变量的正确方法是最重要的。一个简单的 autocmd 听起来不错。 (4认同)