vim应该使用git或fugitive自动提交quit(?)

时间:2014-03-23 10:11:17

标签: git vim github versioning vim-fugitive

我是git的新手,我有点像我想要的那样使用git。 我管理着一堆服务器。 我想要的是我编辑的配置文件的本地存储库。如果遇到missconfiguratin,我可以轻松地跳回到工作版本。

例如: 我编辑了一个不在存储库中的文件。编辑后我想自动将它添加到repo中,包括绝对路径并执行提交。退出时应自动询问提交消息。

到目前为止,我在vimrc.local中使用这个额外的行尝试了它:

autocmd BufWritePost * let message = input('Message? ', 'Auto-commit: saved ' . 
expand('%')) | execute ':silent ! if git rev-parse --git-dir > /dev/null 2>&1 ; 
then git add % ; git commit -m ' . shellescape(message, 1) . '; fi > /dev/null 2>&1'

来源:stackoverflow

这并不能解决我的问题,因为文件没有包含在绝对路径中,有时根本没有添加。

我听说逃亡者可以做到这一点,但我不会这样做。

我想我不是第一个遇到这个问题的人。任何人都可以解释我如何逐步设置它。请考虑我是这个主题的新手。

提前致谢 克里斯

1 个答案:

答案 0 :(得分:1)

从长远来看,如果你逃亡,我认为你会更有成效。我发现:Gdiff无价值。

我不喜欢vim中长单行的风格。如果我希望让头晕,我会盯着正则表达式。我会按照以下方式拆分您的自动命令,以便更容易理解和更新:

autocmd BufWritePost * call AutoGitCommit()

function! AutoGitCommit()
  let message = input('Message? ', 'Auto-commit: saved ' . expand('%'))
  let message = shellescape(message, 1)
  let shellcommand = 'if git rev-parse --git-dir > /dev/null 2>&1 ; '
  let shellcommand .= 'then git add ' . expand('%:p') . ' ; '
  let shellcommand .= 'git commit -m ' . message . '; '
  let shellcommand .= 'fi > /dev/null 2>&1'
  execute ':silent!' shellcommand
endfun

由于文件名现在位于String上下文中,将不再自动展开,因此我使用escape()。因为您要求绝对路径,我添加了:p修饰符。请参阅:help expand():help filename-modifiers

事实上,我的偏好是让vim处理条件,如下所示:

function! AutoGitCommit()
  call system('git rev-parse --git-dir > /dev/null 2>&1')
  if v:shell_error
    return
  endif
  let message = input('Message? ', 'Auto-commit: saved ' . expand('%'))
  call system('git add ' . expand('%:p'))
  call system('git commit -m ' . shellescape(message, 1))
endfun