在Windows系统上比较两个文本文件


11

由于ediff-filesediff-buffers结果apply: Searching for program: no such file or directory, diff在Windows机器上的错误。

如何在Windows系统上使用Emacs比较两个文件?


1
通过安装GetGnuWin32,您可以访问许多gnu软件(diff但alos wget,sed等)。如果您只关心diff,可以使用gnu.org/software/diffutils
fredtantini 2015年

该错误消息告诉您出了什么问题:您尚未diff安装。去获取Cygwin,然后重试。
itsjeyd

@itsjeyd Cygwin的已经安装在系统
Empty_Mind

@fredtantini安装GetGnuWin32后,我得到相同的错误
–Empty_Mind

2
在你的路上吗?我认为目录至少应该在exec-path变量上。
fredtantini

Answers:


8

就像@nanny在评论中说的那样,解决方案已在Cyutil中安装了diffutils。这是操作方法:

  1. 从其主页下载Cygwin 。
  2. 使用diffutils: A GNU collection of diff utilities软件包安装Cygwin 。该软件包可以在UtilsCygwin安装的几个步骤之一的部分中找到。 用diffutils安装Cygwin
  3. 将Cygwin目录添加到PATH Windows系统变量。这可以通过以下方式完成:
    a)添加您自己的CYGWIN变量,以保持顺序。创建CYGWIN系统变量;
    b)并将刚刚创建的变量添加到系统PATH变量中。将CYGWIN变量添加到PATH系统变量

之后,您就可以成功呼叫ediff-buffersediff-files以及其他人。看起来像这样:运行ediff

请享用!


3

如果您已经为Windows安装了git,则足以添加

C:\Program Files\Git\usr\bin\

到您的PATH,因为它已经附带了diff可执行文件并将其安装在该文件夹中。


2

这样可以节省一些时间,所以我将在这里回答。如果您不希望将cygwin bin目录添加到路径(或其他答案中建议的其他任何路径),则可以通过设置变量来设置ediff使用的程序的路径ediff-diff-program。例如,C:\cygwin\bin如果使用cygwin,则可以将其设置为(或您所用的实际路径)。我花了一些时间才知道要设置哪个变量。无法正常工作的有:ediff-custom-diff-programdiff-command

例如:

(setq ediff-diff-program "c:/CYGWIN64/bin/diff.exe")

可以。


IIRC,您无法在Shell外部调用cygwin二进制文件,因为它们无法加载某些库。我认为这仅在从Cygwin运行Emacs时有效,后者应PATH正确设置变量。如我错了请纠正我。
DoMiNeLa10

1
@ DoMiNeLa10我在Windows 10机器上使用Emacs 26.1在不知道Cygwin的情况下从任务栏启动emacs对其进行了测试。此外,将其添加到路径的解决方案如果确实存在问题,则会遇到与您描述的问题相同的问题。
斯特格曼

1
抱歉,我的评论的最后一部分不正确。将其添加到路径不会出现您建议的相同问题,因为它可以找到这些库。就是说,我在答案中测试了该方法,并且效果很好。
斯特格曼

0

如果您不需要产生差异,而只想查找文件之间的差异,那么一种M-x compare-windows替代方法是使用。

打开两个文件,以便您同时看到它们,将点移至两个缓冲区的开头,然后运行M-x compare-windows。它将移动到文件不同的第一个位置。这应该可以在没有任何外部可执行文件的情况下工作。


1
这将在两个文件中第一个不同的字符之前停下来。
Empty_Mind

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.