如何让git像hgeditor脚本一样在vim中显示更改?

6
在Mercurial中有一个有趣的功能,即能够在vim分割窗口中查看将要提交的更改(请参见DiffsInCommitMessageInVIM)。
有没有关于如何在Git中实现这样的功能的提示?

请注意,core.editor 不仅用于提交(commit),还用于标签(tag)、添加(interactive)和提交(commit -e)。 - Josh Lee
5个回答

9
假设您启用了语法,Vim将git提交消息识别为一种文件类型。这应该很明显,因为它会进行突出显示。不太明显的部分是它还有一个针对git提交(和其他git事物)的文件类型插件。确保启用了这些插件(filetype plugin on),然后就会定义一个有用的命令:DiffGitCached。只需运行该命令,它就会将差异抛到预览窗口中。
在插件中定义该命令旁边的注释:

可以使用以下方法自动进行差异比较:

autocmd FileType gitcommit DiffGitCached | wincmd p

文件类型插件存储在/vimXX/ftplugin/git*.vim中,例如,如果您想要查看,可以找到/usr/share/vim/vim70/ftplugin/gitcommit.vim

即使没有指定文件类型(我可以看到vim检测到了文件类型,因为有高亮显示),DiffGitCached似乎也无法工作。很奇怪。 - Alexis Métaireau
@Alexis:嗯,对我来说它运行得很好。故障排除...命令已定义,对吧?它尝试运行并弹出预览窗口?如果它是空的,那么可能是因为你实际上没有暂存任何更改(不太可能),或者它无法运行适当的git命令...如果你只是执行!!git diff --cached会发生什么?也就是说,在你的提交消息窗口中直接调用git命令。 - Cascabel
1
啊!是我的vimrc的自动更改目录选项引起了麻烦 :) 感谢您的帮助! - Alexis Métaireau
我更喜欢使用 ... | wincmd L,它会将差异缓冲区停靠在右侧。 - acorello
@AlexisMétaireau,您能在这里发布一下您需要禁用的选项吗? - asymmetric
显示剩余3条评论

2
我已经修改了HGEDITOR.SH脚本,以支持Git,请在此处克隆:

git clone git://github.com/dharrigan/giteditor.git

享受吧!


嘿,David! :) 这正是我在寻找的!(Alessandro) - acorello

1

我强烈推荐tpopes的 vim-fugitive 插件用于处理Git。

你可以在这里找到它 here


1
如果你使用的是git 2.9及以上版本,可以通过运行git config --global commit.verbose true来获得这种行为。
来源:this answer

0

我使用来自www.vim.org的Pierre Habouzit's git.vim。将其放入~/.vim/ftplugin中,然后您就可以开始了(假设您的~/.vimrc中通常有filetype plugin indent on)。


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