我正在编写一个相当复杂的脚本。我怀疑有几个部分具有几乎相同的代码。我可以(以及如何)在vim中打开文件,在缓冲区上有两个(或更多)窗口,并在同一文件上区分窗口内容? vimdiff似乎只适用于两个文件。如果我制作文件的副本并尝试vimdiff两个版本,差异原点仍然锁定在文件的开头。虽然我可以取消锁定窗口,并将窗口移动到我要比较的文件部分,但不显示差异。任何提示或提示?我可以剪切并粘贴我要比较的部分与不同的文件然后应用vimdiff然后我冒险迷失在什么部分来自哪里当我尝试将单独的文件一起修补时,我觉得必须有一个更直接,更简单的方法。
答案 0 :(得分:2)
我通常做的是差异副本
:%w %.alt
:vert diffsplit %.alt
然后快乐地重新排列'alt'版本,以便伪匹配位对齐。
请注意(推测)git包含spiffy merge / diff cow-powers,它应该能够检测子文件移动的块更改。
虽然我还没有(实际上)将其付诸实践,但我有一种预感,即vim的非常好的git插件fugitive
可能能够利用这些马力中的一些来使这更容易。 注意:完全期望在使用之前要求脚本,但我仍然认为分享这个想法会很好(如果你先到达它,也许你可以共享一个脚本!)< / em>的
答案 1 :(得分:1)
作为一种替代解决方案,我偶尔会使用并且在我看来非常好用linediff.vim。
它允许您使用可视模式从任意缓冲区中选择两个文本体(或相同的文本)并在它们上运行vimdiff。它的美妙之处在于,当您编辑并保存临时diff缓冲区时,可以使用更改更新原始缓冲区,而不保存。
我的一个用例是当我解决与脚本重构和重新排序相关的合并问题时,其中一个函数已被移动并且可能也被修改。为了确保您不会丢失任何来自祖先的修改,您可以通过直观地选择它们并运行linediff命令来区分函数的两个版本。