如何使用Vim快速查看Mercurial或Git的更改

30

我在使用Vim编辑文件时,希望能够快速突出显示自上次提交以来所做的任何更改,同时仍然能够编辑该文件。是否有类似实现此功能的方法?

8个回答

19

看一下 Tim Pope 的 fugitive.vim 插件。

我是一个 Git 纯洁主义者,通常会在命令行中使用 Git ,但当我在 vim 中时,我发现这个插件可以满足我大部分的需求,同时我还可以直接调用 git 命令。


我喜欢fugitive插件胜过vcscommand插件,但是我也需要hg支持,所以我接受了其他答案。不过,感谢你介绍fugitive插件给我! - Kyle Heironimus
很高兴我喜欢它。一开始我不确定,直到一个朋友建议我自己尝试一下,现在我发现它能满足我的需求。 - Abizern
3
@Abizern,抱歉我意识到这是一个老问题,但是你如何使用Fugitive来突出显示已更改的行,就像OP的问题一样? - James McMahon
@JamesMcMahon 抱歉 - 自从我写下这个答案以来,我已经转向使用Emacs和Magit了。我的Fugitive知识已经退化了。 - Abizern
1
@JamesMcMahon 你可能已经想到了,但是:Gdiff显示差异。关于gitgutter的答案还提供了另一个有用的工具。 - Kyle Heironimus

19

编辑于2020年01月23日:快速搜索后发现还有另一个插件似乎更加支持版本控制系统:https://github.com/mhinz/vim-signify


有一个新的插件可以实现这个功能: vim-gitgutter。每当你保存文件时,它会将更改放在 Vim gutter 中。以下是其效果图:

enter image description here


1
很好。如果问题只涉及Git,我会接受这个答案。正是我想要的。 - Kyle Heironimus
1
我只使用了一小段时间,它非常有用。它使得查看文件中哪些部分已更改变得非常容易。一个不错的项目可能是将其移植以包括hg更改。 - Anthony Panozzo

13

尝试使用vcscommand插件,使用:VCSVimDiff查看与当前修订版本的差异(支持hg和git,可能也支持其他SCM系统),使用内部:bdelete:bd)停止差异比较(当然是在已打开的缓冲区上,而不是已存在的缓冲区上)。如果您正在使用gentoo,请在库中获取:app-vim/vcscommand


1
接受这个是因为它适用于git和hg(还有其他一些)。然而,我更喜欢Tim Pope的fugitive来处理git。 - Kyle Heironimus

6
一种方法是按照以下步骤操作: :!git diff 这将显示与 HEAD 相比的更改(对于所有文件)。
要查看单个文件的更改,请使用以下命令: :!git diff path/to/file 这是一种快速的方法,无需切换不同的应用程序或安装任何插件(在某些你无控制权的系统上安装插件并不总是容易的)。
它不会给出“内联”高亮,但应该可以正常工作。
另一种快速方法是使用以下命令::r !git diff,查看更改,然后键入 u 撤消添加。这也很好用,特别是如果你想从 HEAD 拷贝一些文本。

1
对于当前文件,只需执行 :!git diff %:!hg diff % - Christopher Camps

4
这个怎么样(无需插件):
:new | r ! hg annotate -un #

运行hg annotate命令在当前缓冲区的文件名上,然后将输出转储到一个新缓冲区。

这种形式的命令显然不是特定于git和hg的。您可以以这种方式捕获任何shell命令的结果。


4

2
对于Mercurial,与相当的是:http://bolt80.com/lawrencium
它支持并排差异和高亮显示的视图(基本上就是从>获取的内容)。
(免责声明:我是作者)

2

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