在Vim中比较两个标签页的差异

124

场景:我已经打开了Vim并粘贴了一些文本。 我使用: tabe打开第二个选项卡,并在其中粘贴其他文本。

目标:我希望有一个第三个选项卡,其输出相当于将两个文本写入文件并使用vimdiff打开。

我找到的最接近的方法是“将当前缓冲区与文件进行比较”,但不能diff两个打开但未保存的缓冲区。


1
什么是“tabe”命令? - hhafez
1
@hhafez - 在新标签页中打开一个新的缓冲区。 - Rook
3
简化版翻译:这是“:tabedit”的缩写,也就是“:tabnew”。 - TSomKes
4个回答

194

我建议在同一标签页中打开第二个文件,而不是新建一个标签页。

这是我通常做的:

:edit file1
:diffthis
:vnew
:edit file2
:diffthis

:vnew 命令可以将当前视图垂直分割,以便在其中打开第二个文件。然后对每个视图应用 :diffthis(或简写为 :difft) 命令。


1
顺便提一下,MacVim似乎默认没有这个功能,但我认为你应该能够进入终端并键入vimdiff file1.txt file2.txt,然后自己试试。 - ruffin
3
这真是太棒了。edit fileN部分可以替换为直接从缓冲区粘贴,这样你就可以比较两个文本块而不必将它们粘贴到临时文件中(这是meld可以做到的,但Mac上的可视化差异工具却缺乏此功能)。在我的MacVim上,这个方法可以立即使用。 - yshavit

38

10
使用:vert diffsplit可以使差异比较显示更加传统,与不使用:vert的效果不同。 - ephemient
7
你可以使用:set diffopt+=vertical命令让:vert成为默认设置。 - graywh
3
同时滚动两个窗口的命令是:在两个窗口中输入 :set scrollbind - Dmytro Sirenko
如果我有两个选项卡,就无法工作,就像问题中所问的那样。如果我执行:diffsplit,我会得到两个连接的缓冲区。 - erik

27
当您在竖直分割模式下打开两个文件时,请运行以下命令:

:windo diffthis

该命令可以帮助您将两个文件进行比较差异。请注意保留HTML标记。

9
使用 :diffoff 命令关闭差异模式。 - A B
2
但是我如何从两个选项卡切换到垂直分割? - erik

4
所有选项卡的内容都在缓冲区内。看一下缓冲区:
:buffers

找到与当前选项卡内容进行比较的正确编号。

在当前选项卡中打开缓冲区(例如,缓冲区编号为4)。

:sb 4

或者针对垂直视图进行操作:

:vertical sb 4

然后,您可以使用简单的diff工具比较内容:
:windo diffthis

如果您完成了差异分析,可以输入以下内容:
:windo diffoff

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