在Emacs中用ediff比较文件时出错的解决方法

本文最后更新于 2024年5月30日 晚上

基础环境

1.操作系统:Windows 10 家庭版
2.软件版本:GNU Emacs 24.5.1 (i686-pc-mingw32)

 

 

重现操作

打开 Emacs 后,键入 M-x ediff 命令

备注:M-x 指的是同时按下 Alt 键和 x 键,之后在输入 ediff 。

 

根据提示输入第一个文件全名

备注:输入的必须是完整路径和完整文件名(带后缀)。

 

根据提示输入第二个文件全名

备注:输入比较的另一个文件。

 

 

问题现象

在经过以上操作步骤后,且确定命令和文件名正确的情况下,显示 Searching for program: no such file or directory, diff 这段错误信息,意思是没有找到 diff 这个程序文件。

 

 

问题原因

上图是更详细的 ediff 命令的运行记录,可以看到 Emacs 正确的读取了2个文件,并且准备比较它们,但这时候却没有找到执行比较的程序 diff 。

Emacs 的 ediff 命令需要调用比较文本文件的 diff 程序,在 linux 操作系统中,内置了 diff 程序,而 Windows 操作系统则没有,所以才会出现这个错误。

 

 

解决方法

安装并正确配置 KDiff3 即可解决问题,它带有 diff 程序。

KDiff3 是一款用来比较文件和目录的工具软件,它可以同时比较2个或者3个文件、目录,并显示它们的差异。同时它支持 Linux、Windows、Mac OS等大部分操作系统,是一个跨平台的软件。

KDiff3 官方首页

KDiff3 的网站地址是:https://sourceforge.net/projects/kdiff3/

 

下载 KDiff3

在网页上点击红框所示的按钮下载 KDiff3 安装程序,需要注意的是黄线所标注的部分,代表这个是 KDiff 的64位安装程序。

如果你的系统是32位的,则需要下载32位的安装程序。点击蓝框圈起来的 Browse All Files 链接,进入 KDiff 的多版本列表页面。

 

下载 KDiff3 的其他版本

点击红框中的 kdiff3 链接,进入详细的程序版本页面。

 

KDiff3 的版本列表

版本号的数字越高,代表程序越新。点击红框中的 0.9.98 链接,这是现在最新的 KDiff3 程序。

 

下载 KDiff3 的32位版本

点击红框中的链接,就可以下载32位版本的 KDiff3 了。

 

开始下载 KDiff3

等待5秒后,就会自动开始下载。如果没有自动下载,则点击 direct link 这个链接,手动下载。

 

正在下载 KDiff3

如果你使用 chrome 浏览器,这时会显示如图所示的下载进度。

 

KDiff3 安装程序

图中所示的就是 KDiff3 的安装程序,在上面的是32位的程序,下面的是64位的程序。参照自己的操作系统,选择安装。

 

KDiff3 许可证协议

运行 KDiff3 安装程序后,打开的第一个页面是许可证协议,点击 我接受 按钮继续安装。

 

选择要安装的 KDiff3 组件

在 选择组件 页面我们只需关注 Integration 选项,点击它前面的 + 展开所有选项。

 

按需选择组件

KDiff3 会集成到列出的程序中,取消不想集成的程序。我只保留了 Explorer 和 Diff-Ext 。

选择 KDiff3 的安装目录

这时你可以选择将 KDiff3 安装到你想要的位置,尽量不安装到系统盘(C盘),可能会影响程序运行效率。

 

设置 KDiff3 的使用权限

页面中间唯一选项的意思是安装KDiff3后,所有用户都可以使用它,如果你和其他人共用一台电脑,并且各自持有账户,可以取消它。

 

选择创建快捷方式

如果你不需要快捷方式,可以选择 不要创建快捷方式 选项。

 

KDiff3 正在安装

KDiff3 正在安装到你的计算机,等待完成即可。

 

KDiff3 安装完成

KDiff3 已经安装完成,勾上 运行KDiff3 ,并点击完成,即可运行 KDiff3 了。

 

KDiff3运行界面

如图所示,出现这个界面就说明 KDiff3 已经正确安装,但这时 ediff 命令仍然会出错,因为还没有正确的进行配置。

 

复制 KDiff3 的 bin 目录路径

找到你安装 KDiff3 时的目录,并进入其中的 bin 目录,然后复制资源管理器显示的目录路径。

 

计算机图标

在桌面上找到计算机图标,在 Windows 的各个版本中,名称是不一样的。Windows 10 中叫 此电脑,Windows 7、8 中叫 计算机,其他本版叫 我的电脑。

 

计算机右键菜单

右键单击计算机图标,在右键菜单中选择 属性 选项。

 

计算机基本信息窗口

点击红框中的 高级系统设置 链接,打开系统属性窗口。

 

系统属性窗口

点击红框中的 环境变量 按钮,打开系统的环境变量窗口。

 

系统环境变量窗口

在红框所示的区域中,找到 Path 这一项,先点击选中它,然后点击下面的 编辑 按钮,打开编辑窗口。

添加 KDiff3 的 bin 目录路径

将之前复制的 KDiff3 的 bin 目录路径,黏贴添加到变量值的最后,且用英文分号将我们新添的值和旧值隔离开,如图所示。

至此,已配置完成,可以重新在 Emacs 中测试一下 ediff 命令了。

 

 

结果测试

如果一切顺利,应该出现上图所示画面,这代表我们已经解决了 ediff 命令不能使用的问题。

 

 

注意事项

  1. 添加环境变量时,一定要用英文分号将旧值和新值隔离开。
  2. 安装 KDiff3 且配置完成后,需要重新启动 Emacs,使其重新载入环境变量。

 

参考资料

  1. Re: Searching for program: no such file or directory, diff
  2. KDiff3 download | SourceForge.net

 

 


捐赠一元,支持一下!  

注:捐赠时如在留言中注明网名或昵称,即可被列入到感谢名单中。否则,会以佚名身份列入名单。


在Emacs中用ediff比较文件时出错的解决方法
https://rsreland.net/blog/202002291151/
作者
百二一
发布于
2020年2月29日
许可协议