Vim: 如果文件未被Git跟踪,则发出警告

4

Gitgutter是一个非常好的工具,可以让我了解未提交的更改情况,但我经常忘记将完整的文件包含在提交中。

如果我正在编辑一个位于git仓库目录中但完全未被跟踪的文件,我希望在Vim状态栏中得到警告。

有什么实现这个功能的想法吗?

我目前正在使用AirlineFugitive,如果可以使用它们来实现就太好了。

3个回答

1
首先,定义一个类似这样的函数:

function something():

fun! GitTracks(...)
  let file = a:0 ? a:1 : expand('%')
  let message = system('git ls-files -- ' . file)
  let is_tracked = (message =~ '^fatal:') ? 0 : strlen(message)
  if is_tracked
    hi StatusLine guibg=blue
  else
    hi StatusLine guibg=black
  endif
  return is_tracked
endfun

如果你不在git仓库中或者你的文件没有被跟踪,这将返回0。谁知道,也许有一天你想用一个参数来调用它。只是为了好玩,我改变了状态行的颜色。(这需要一段时间才能生效,这取决于你对'updatetime'的设置。你可以从函数中删除它,并使用BufEnter自动命令来检查GitTracks()的值。)
接下来,决定如何在你的状态行中表示这个。例如,
:set stl+=%{GitTracks()?'tracked':'NOT\ tracked'}

正是我所需要的。谢谢!这是我使用 airline 所做的 https://github.com/epeli/vimconfig/commit/dc7fdc6f79b4ddf81e1685c875105d010002f0b4 - esamatti
实际上,我不得不稍微更新一下,以避免出现渲染故障。https://github.com/epeli/vimconfig/blob/23d97ae6d668b22f3da56a5373744c9f579d117d/vimrc#L149-L164 - esamatti

0
你几乎可以使用powerline来完成这个任务。它是一个可配置性非常强的实用程序,可以在vim中为您提供非常强大的状态栏,并在bash/zsh中用于强大的提示显示。
这是我的样子(默认配置),显示以下信息:
{正常模式激活} | BR:{当前git分支} | {文件名} vim-powerline-example 我相信一定有一种方法可以在其中获取当前缓冲区文件的状态...

0

fugitive#statusline() 不会打印文件跟踪状态,据我所知只有分支。 - esamatti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接