5

我正在编写一个相当复杂的脚本。我怀疑有几个部分的代码几乎相同。我可以(以及如何)在vim中打开文件,缓冲区上有两个(或更多)窗口,并在同一个文件上区分窗口的内容吗?vimdiff 似乎只适用于两个文件。如果我制作文件的副本并尝试 vimdiff 两个版本,则差异来源仍锁定在文件的开头。虽然我可以取消滚动锁定窗口,并将窗口移动到我想要比较的文件部分,但没有显示出来。任何提示或提示?我可以将要比较的部分剪切并粘贴到不同的文件,然后应用 vimdiff,但是当我尝试将单独的文件修补在一起时,我可能会迷失在哪个部分来自哪里,我确信必须有一个更简单的,更简单的方法。

4

2 回答 2

2

我通常做的是 diff 到副本

:%w %.alt
:vert diffsplit %.alt

然后很高兴地重新排列“alt”版本,以便伪匹配位对齐。


请注意,(大概)git 包含漂亮的合并/差异牛能力,应该能够检测到子文件移动的块更改

尽管我还没有(还)真正将它付诸实践,但我有一种预感,非常好的fugitivevim git 插件可能能够利用其中的一些功能来使这更容易。注意:完全期望这需要 scriptinh 才能使用,但我仍然认为分享这个想法会很好(如果你先得到它,也许你可以分享一个脚本!)

于 2011-04-25T15:11:31.257 回答
1

作为我偶尔使用的替代解决方案,在我看来效果很好的是linediff.vim

它允许您使用可视模式从任意缓冲区(或相同的缓冲区)中选择两个文本体并在它们上运行 vimdiff。它的美妙之处在于,当您编辑和保存临时差异缓冲区时,您会使用更改更新原始缓冲区,而无需保存。

我的一个用例是当我解决与脚本重构和重新排序相关的合并问题时,其中一个函数已被移动并且可能还被修改。为了确保您不会丢失来自任一祖先的任何修改,您可以通过直观地选择它们并运行 linediff 命令来单独区分函数的两个版本。

于 2012-04-24T07:49:22.823 回答