有没有办法将 Vim 中的保存与 git 中的提交挂钩?

gon*_*oyd 12 vim git

我是 Vim 世界的新手,我想让它每次保存文件时都提交给版本控制。这可能吗?

don*_*lly 5

您可以使用 Vim 的自动命令:

:autocmd BufWritePost * execute '!git add % && git commit -m %'
Run Code Online (Sandbox Code Playgroud)

这是未经测试的,但它应该添加文件并使用文件名作为提交消息来提交它。
您需要 BufWritePost,因为这是在写入文件后触发的。我想象有很多令人厌烦或不安全的边缘情况。


Nic*_*rds 5

我使用放置在我的 .vimrc 中的 vim 自动命令。该命令首先粗略地检查我们是否在 git 目录中工作(通过检查 .git 目录是否存在,无论是在当前目录中还是使用git rev-parse),然后使用,git -a -m %以便仅暂存和提交先前添加的文件.

autocmd BufWritePost * execute '! if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m %; fi'
Run Code Online (Sandbox Code Playgroud)

  • 此版本仅在您位于 repo 的根目录中时才有效。更好的解决方案是`autocmd BufWritePost * execute '!如果 [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1 ; 然后 git add % ; git commit -m %; fi'`,来自 [SO answer](http://stackoverflow.com/a/2180367/177116) (2认同)

M'v*_*'vy 0

您当然可以通过宏或命令重新映射来实现这一点。

(检查/sf/ask/8200531/

但我不确定这是一个好的选择。我暂时不精通git,我知道它有时与svn不同。但我不会用 svn 来做这个自动提交。提交需要有意义,而不是定期保存。

您通常会提交,因为您添加了一个功能,修复了一个错误,......而不仅仅是因为您处理了一个文件。您不会最终得到无法编译的项目或未完成的功能。