在Sublime Text中比较两个文件的内容

497

我有两个非常相似的开源项目的克隆存储库,我一直在不同的 Sublime Text 2 实例中使用这些项目的代码来达到我想要的结果。对于我的项目,使用了这两个项目的代码。我一直在使用 Git 作为版本控制工具,但并未包含原始项目。因此,我希望能够快速比较原始项目的两个文件的内容,并比较它们与我的项目之间的差异。

我希望 Sublime Text 2 有一个“比较文件”功能,但是我无法在设置或在线上找到任何相关的内容。第三方 ST2 包也可以完成此任务。这样的任务是否可以在 ST2 文本编辑器内完成?

11个回答

848

你可以在Sublime Text中本地比较文件。

  1. 通过“打开文件夹...”或在项目中导航到包含它们的文件夹
  2. 在侧边栏中选择要比较的两个文件(例如,通过按住Windows上的Ctrl或macOS上的
  3. 右键单击并选择“Diff files...”选项。


30
@Derek:使用“选择”功能可以选择文件,但无法在右键菜单中找到“查找差异文件”的选项,只有“关闭”选项。 - Mohamed Hussain
80
实际上有两个不同的侧边栏,你需要进入正确的侧边栏才能使它起作用。如果你点击“文件”>“打开文件夹...”,选择包含你文件的文件夹,然后选择“查看”>“侧边栏”>“显示侧边栏”,你将得到你需要的那一个。通过选择“查看”>“侧边栏”>“显示已打开的文件”,你可以得到另外一个侧边栏,但是这个选项将不能让你使用“Diff Files...”选项。 - Jeramy
31
很不幸,在Mac上使用Sublime Build 3103好像已经不起作用了。一旦我右键点击,第二个文件就会被取消选择。 - merlin
11
在我的OSX Build 3144版本中无法使用。我可以在文件界面中选择两个文件,但是当我按下Ctrl键点击时只有一个被选中,且diff选项不存在。 - James J
7
3114版本的Windows对我也不起作用。右键单击文件时没有“diff”选项。 - dangsonbk
显示剩余14条评论

280

Compare Side-By-Side 看起来对我来说是最方便的,尽管它不是最受欢迎的:

更新: 我需要补充说明,如果比较大文件时,此插件可能会冻结文本编辑器。如果您要比较大型文本文件,则这绝对不是最佳选择。


17
在我看来,这是最简单和最方便的解决方案。在ST3中运作良好。 - mihai
8
能够很好地工作,并且可以比较来自不同位置的文件,这一点我无法通过本地比较实现。 - Leo
8
这也适用于在新未保存的标签页中复制粘贴的内容,这在紧急情况下非常方便。 - mtone
1
比较并排功能真的帮了我。 - noob
1
这在我的ST4中出了问题。它们不会并排显示,也没有任何文本被突出显示。 - Mentalist
显示剩余5条评论

68

通过Package Control,有许多diff插件可供选择。我使用过Sublimerge Pro,它运行良好,但是它是商业产品(有无限试用期)且闭源,因此如果您想更改某些内容或查看其内部结构,则无法进行调整。 FileDiffs非常受欢迎,根据安装数量来判断,所以您可能想尝试一下这个。


3
我现在正在使用FileDiffs,它真是妙不可言。感谢您的回答,我已经接受了。 - LanceLafontaine
3
我无法弄清楚如何使用FileDiffs。您能简要描述一下我如何使用它来比较两个文件吗? - Jamil Ahmed
5
@LanceLafontaine,我通常不这样做,但您能否将被接受的答案更改为下面 Derek 朕會功夫 的答案?我们俩真的不需要积分,但当时我不知道有内置的差异。现在我在 Sublime 中一直使用它。唯一不使用的情况是需要外部工具的扩展功能。 - MattDMo
这些插件中哪一个能够检测整个文本块的移动?不仅仅是告诉你这里缺少了一些行,那里出现了一些行,而且还能用箭头显示它们如何移动? - skan
由于这个答案,我安装了FileDiffs并添加了使用TortoiseMerge.exe进行比较的命令。这对于我每天使用Sublime代码比较来说是一个巨大的改进。谢谢! - lyubeto

60
更新
(考虑到点赞数量,我认为有必要提供完整的逐步说明...)
  1. 在菜单栏中点击 文件 -> 打开文件夹...
  2. 选择一个文件夹(实际文件夹并不重要,这一步只是为了让 文件夹 侧边栏可用)
  3. 如果还没有显示侧边栏,请通过 视图 -> 侧边栏 -> 显示侧边栏 显示它
  4. 使用这个名为 文件夹 的侧边栏导航到你想要比较的第一个文件。
  5. 选择它(单击它),按住 Ctrl 键并选择第二个文件。
  6. 选定两个文件后,在其中一个上右键单击,然后选择 比较文件...

现在应该会出现一个新的选项卡来显示比较结果.


原始简短答案:
请注意:

"比较文件" 只会在 "文件夹" 侧边栏中出现(打开文件夹:文件->打开文件夹),而不会在 "打开的文件" 侧边栏中出现。


有没有办法选择这些不同的行?其中一行是红色的,另一行是绿色的。 - zeristor
1
你所说的“选择”是什么意思?是将它们标记并复制吗?还是提取它们?感谢您的澄清! - langlauf.io
由于缺失的行以“-”为前缀,因此我选择了其中一行,然后匹配了所有行,选择了完整的行并进行了复制。 内置的方法只会让事情变得更加混乱难记。 - zeristor
6
值得说明的是,这两个文件都不能直接硬打开。如果你双击打开了它们中的任意一个,那么你就无法使用Ctrl键在侧边栏中同时选择这两个文件进行比较。你必须先关闭其中一个文件才能同时选择这两个文件。我发现这一点是因为我已经将这两个文件都打开并希望使用diff文件进行比较。 - Battousai
@Battousai 我可以,无论是由于插件还是其他原因(可能是侧边栏增强功能)。我同时打开这两个文件,然后再次选择它们,就可以将它们进行比较,这会在第三个文件中打开。也许 - 这两个选定的文件需要在项目文件夹中,而不是在侧边栏顶部的“打开文件”部分中。 - Craicerjack
1
@NaveenDA 我修改了我的回答以便删除失效的链接。谢谢你的提示! - langlauf.io

38

2018年1月更新 - 特别适用于Sublime/Mac

(这与Marty F的回复非常相似,但解决了之前回复中的一些问题,结合了几个不同的建议并讨论了我最初遇到的关键区别。)

我正在Mac上使用Sublime Text 3(版本号3143),已经尝试了大约30分钟来找到文件比较功能。我之前在Sublime/Mac上使用过它而没有任何问题,但这次有点麻烦。但是,我最终弄清楚了。

  1. 文件格式不需要是UTF-8。我已成功比较了UTF-8、ISO-8559-1和Windows-1252等多种格式的文件。

  2. 在Sublime/Mac上没有“文件 > 打开文件夹”选项。上述许多说明都以“选择文件 > 打开文件夹”开始,但在Sublime/Mac上不存在该选项。

  3. 文件比较是基于项目进行的。如果要比较两个文件,则它们必须保存到磁盘并且属于当前项目的一部分。

  4. 打开项目的方法:

  • 如果Sublime/Mac没有运行,或者如果它正在运行但没有打开任何窗口,则将文件夹拖到Sublime应用程序上。
  • 如果Sublime/Mac正在运行,请选择“文件 > 打开”,导航到所需的文件夹,不要选择文件或文件夹,然后单击“打开”。
  1. 将文件夹添加到项目中。如果您要比较的文件不属于同一层次结构,请先打开包含一个文件的文件夹。然后,选择“项目 > 添加文件夹到项目”,导航到要添加的文件夹并单击“打开”。现在,您的侧栏中将会看到两个根级文件夹。

  • 侧边栏必须可见。您可以通过“查看>侧边栏>显示侧边栏”,或使用快捷键Command-K,Command-B来实现。

  • 文件必须关闭(即保存)才能进行比较。在侧边栏中单击文件并不会打开文件,但会显示文件内容。如果文件处于打开状态,则在侧边栏顶部的“打开文件”部分中列出。双击文件或对文件进行修改将自动将其状态更改为“已打开”。在此情况下,请确保在尝试比较之前关闭该文件。

  • 从文件夹层次结构中选择文件。这里是标准的Mac快捷方式,()击第一个文件,然后Command-click第二个文件。当您选择第一个文件时,您将看到其内容,但它并未打开。然后,当您Command-click第二个文件时,您将看到内容,但同样,两个文件都没有打开。您将注意到编辑面板中仅有一个选项卡。

  • Control-click不同于右键单击。这是让我困惑的一点。我使用触控板,通常将Control-click用作右键或二次点击。这对我来说不起作用。但是,自从我在系统偏好设置中配置了触控板,将我的触控板底部右侧用作右键之后,它起作用了,显示出上下文菜单,其中包括“删除”、“在Finder中显示”和......“比较文件”。

  • 完成!


    2
    能否进行文件夹比较,而非文件比较? - DCBoy
    1
    天啊!你刚刚拯救了Mac用户! - analyst045
    1
    这么多年过去了,我怎么会错过“控制键+单击不等于右键单击”这个知识点呢?谢谢你提醒我。另外,就我使用的MacBook Pro和MacOS Mojave系统而言,二次点击默认是在触摸板上用两个手指轻敲实现的。 - Paul Brady
    通常情况下,Control-Click与secondary-click是相同的。但在Sublime Text中似乎不是这样。不确定为什么。 - Zonker.in.Geneva

    11

    在最新的Sublime 3中,View - Layout和View - Groups命令可以完成此操作。

    例如:

    Shift+Alt+2 --> 创建2列

    Ctrl+2 --> 将选定文件移动到第2列

    这是用于并排比较。对于实际差异,有其他已经提到的diff函数。不幸的是,我找不到一种使列同时滚动的方法,这将是一个很好的功能。


    1
    而要关闭一个组,您可以使用 Ctrl + K Ctrl+down - Alex Raj Kaliamoorthy

    10

    2017年10月更新 我不知道Sublime Text中存在这个功能,但界面似乎与以前的答案略有改变-至少在OS X上。以下是我遵循的详细步骤:

    1. 在菜单栏中点击文件->打开...
    2. 导航到包含要比较的文件的文件夹,并选择该文件夹,然后单击打开按钮,这会使文件夹侧栏出现
    3. 在文件夹侧栏中,单击要比较的第一个文件
    4. 按住Windows上的Ctrl或OS X上的⌘,并单击第二个文件
    5. 选中两个文件后,在其中一个上右键单击并选择Diff Files...

    这将打开一个新标签显示比较结果。第一个文件为红色,第二个文件为绿色。


    7

    所有其他答案要么说明只有在文件夹侧边栏中的项目中打开文件才能进行比较,要么依赖于第三方插件。

    实际上可以直接比较任意两个选项卡,只需选择两个选项卡(按下Ctrl+点击),然后在其中一个选项卡上右键单击并选择Diff Selected Tabs...

    (在ST版本4143中测试通过)


    4

    只有文件存储在项目中的文件夹中,Diff选项才会出现。

    然后你就可以在Sublime Text中本地比较这些文件了。

    通过“打开文件夹”或者在项目中导航到包含它们的文件夹,选择侧边栏中要比较的两个文件(例如,在Windows上按住Ctrl或macOS上按住⌘),右键点击并选择“Diff files...”选项。


    3
    没有人谈论Linux,但以上所有答案都可以使用。只需使用Ctrl键选择多个文件。如果您想进行侧边栏比较,Meld是一个很棒的选择。

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