2010-03-11 35 views
9

我希望能够运行在vim中打开git diff的命令,并为差异集中的每个文件分配一个选项卡。如何在vim中并排查看多个git差异

因此,如果例如我在我的工作树中更改了文件foo.txt和bar.txt,并且运行了命令,我会看到vim以两个选项卡打开。第一个选项卡将包含工作树中的foo.txt和存储库中的foo.txt之间的并排diff,第二个选项卡包含bar.txt的并排diff。

任何人有任何想法?

回答

7

我会改变新vim标签做到这一点(虽然它不是一个单一的命令)

  1. 打开文件的方式:

    VIM -p $(git的差异--name - 只)

  2. 对于每一个缓冲区得到DIFF到您当前的HEAD与vcscommand vim plugin

    :VCSVimDiff

这给出了一个很好的观点,但不是补丁形式。我想坚持git diff

编辑

像戴夫下面写道:步骤1和2可以通过使用

vim -p $(git diff --name-only) -c "tabdo VCSVimDiff" 
+2

您可以将它组合成一个命令,该命令可以放入shell脚本或函数中。 (未经测试的代码): vim -p $(git diff --name-only)-c“tabdo VCSVimDiff” – 2010-03-11 20:39:47

+0

我尝试了单行命令和2部分命令。它只会打开最后一个选项卡的差异。其他选项卡必须具有:VCSVimDiff调用它们。解决方案?..我很想让所有的选项卡运行差异。 – Scoobie 2010-07-29 17:55:29

1

虽然它不会做你想要什么,混帐difftool可能是你最好的选择相结合。 'git difftool --tool = vimdiff --no-prompt HEAD'的开箱即用行为是为工作目录中的每个文件按顺序启动vimdiff并进行更改。

3

改编Benjamin Bannier + Dave Kirby上面的逃犯用户的回答。

,因为我使用fugitive.vim,我适应了上面我最经常使用的情况下,看最后2个提交之间的差异:

vim -p $(git diff --name-only HEAD~1 HEAD) -c "tabdo :Gdiff HEAD~1" 

加载所有变为标签是如此美好比顺序通过git difftool

0

这个简单的插件已经为我工作:TabMultiDiff。它基本上为传递给vim的每一对文件创建一个diff选项卡。该选项卡以每对中的第二个文件命名。

请注意,它不是plugin manager compatible,所以您需要通过将tab-multi-diff.vim复制到.vim/plugin来手动安装它。

下面是比较两对简单文件(aaa/aab和aac/aad)的截图。请注意,我也使用vim-scripts/diffchar.vim这就是个别字符突出显示的原因。 enter image description here