我可以使用哪些工具来查看同一文件的两个部分之间的区别?

3

我想重构一个 Python 模块,其中主要问题是重复代码。

有没有什么工具可以用来查看两个选定部分的差异,以便我可以看到这些几乎相同代码之间的区别?


2
把这两个部分剪切并粘贴到两个新文件中,然后使用任何好的差异工具,如meld、kdiff3或甚至是普通的diff,怎么样? - sinelaw
5个回答

3

虽然我认为界面不是很好,但可以看看Clone Digger。请查看示例

Thinking Craftsman's Tool Kit(TC Toolkit)可能会更容易地找到重复的代码,但似乎没有提供良好的可视化效果。

编辑:如果你愿意付费,Atomiq看起来很有趣。

对于良好的可视化效果,我用Diffuse取得了一些成功,因为它允许任意匹配一个文件中的行到另一个文件中的行:Diffuse

但是,我必须将文件复制为不同的名称才能使其正常工作。


3

我以前偶尔使用Emacs完成以下操作:

  1. 克隆一个间接缓冲区(M-x clone-indirect-buffer)。
  2. 标记一个部分并将其缩小(C-x n n)。
  3. 切换到原始缓冲区并缩小到另一个部分。
  4. 在缓冲区及其克隆上运行Ediff(M-x ediff-two-buffers)。

一个不错的优点是您可以在它们之间合并块而不会混淆。


目前为止最好的解决方案,您可以使用 C-x 4 cclone-indirect-buffer - Antoine Pelisse
我该如何在Vim中做同样的事情? - satoru

1

谢谢您的推荐,但这只适用于Windows系统。 - satoru

0

如果你只在一个文件中有克隆,并且知道它们在哪里,那么克隆检测工具可能就不必要了。但它们检测克隆并直接向您显示似乎恰好是您想要的。

我们的CloneDR具有Python特定版本。如果它发现克隆(即使在“同一个”文件中),它会将它们孤立地展示给您,并根据该语言(Python)规则,而不仅仅是布局,显示它们的精确差异,包括克隆变化和它们如何变化的具体位置。(据我所知,Atomiq仅检测具有完全相同文本行的克隆)。

CloneDR在Windows下运行得非常好。


-1

Beyond Compare的文本比较功能有一个“打开剪贴板”命令,可以将剪贴板上的内容放在比较的一侧。如果您复制第二个函数并再次使用该命令,则会将它们对齐,并突出显示差异。


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