Answers:
我使用放置在.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'
autocmd BufWritePost * execute '! if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m %; fi'
从SO答案中获取答案
您肯定可以在宏或命令重新映射的情况下这样做。
(检查/programming/117150/can-i-re-map-commands-in-vim)
我不确定这是否是一个好选择。我暂时不精通git,我知道它有时与svn不同。但是我不会使用svn进行自动提交。提交需要有意义,而不是定期保存。
通常,提交是因为您添加了一个功能,解决了一个错误,而不仅仅是因为您在处理文件。您将不会遇到未编译的项目或未完成的功能。
我知道这个问题很老,这是公然的自我宣传,但是我写了一个Vim插件,它将触发特定的Shell脚本在特定的Vim autocmd
事件之后运行。例如,.bufwritepost.vimhook.sh
每次启动BufWritePost
命令时,都会(同步)运行名为的脚本。然后,您可以轻松地在该脚本中包含执行git commit所需的任何逻辑。该插件假定这些脚本具有特定的命名约定,并且还支持“挂钩”脚本,该脚本仅在与某些名称匹配或具有某些扩展名的文件上触发。
完整详细信息:https : //github.com/ahw/vim-hooks
我想报告我对这个问题的看法。
我vimrc.vim
在git信息库($VIMCONF
具有bootstrap .vimrc)中进行了映射,并进行了映射<Leader>ve
(“ vim edit”)以在新标签页中打开vimrc。这不会影响当前的工作目录。
因此,如果我vimrc.vim
从vim git存储库之外的其他目录中开始的vim 编辑,则Nick Edwards讨论的方法将失败。我的技巧如下(适用于Windows和Linux)
if has('win32')
" The git command has to be passed to git. So we need to call bash.exe.
autocmd BufEnter *vimrc.vim silent! lcd %:p:h
autocmd BufWritePost *vimrc.vim if expand('<amatch>') =~ substitute(expand('$VIMCONF\vimrc.vim'), '\', '/', "g") | execute '! git add % & git commit -m %' | endif
else " Linux
autocmd BufWritePost *vimrc.vim
\ if expand('<amatch>') =~ expand($VIMCONF)."/vimrc.vim" |
\ let tempdir = getcwd() | execute 'cd' fnameescape(expand('<amatch>:h')) |
\ execute '! if git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m % ; fi' |
\ execute 'cd' fnameescape(tempdir) |
\ endif
endif
说明:
git
已经是在路径(即你应该能够输入git <ENTER>
的cmd.exe
)tempdir
笔记:
|
。如果任何命令失败,链将中止。要突破多行,请从开始下一行\
。*.vim
和expand($VIMCONF)."/ftplugin/"