如何用emacs同时diff多个文件(>=3)

最近有个工作,要同时检查6个Dockerfile是否正确,这6个Dockerfile是人一个一个手动改的,增加了一些软件包安装和配置调整。严格来讲,如果都正确的话,这6个Dockerfile只会有微小差异,为了检查这6个文件是否正确,我的思路是同时diff这6个文件,对比差异,如果所有差异是本来就应有的,那么说明这6个文件都改正确了。

现在问题来了,emacs下有没有什么办法对同时对比这6个文件呢?

vim是可以用 vimdiff Dockerfile1 Dockerfile2 … Dockerfile6 来对比。emacs下我搜来搜去似乎只能同时对比两个文件。有没有大佬支招?

ediff-buffers?

如果我想的没错,vimdiff file[0] ... file[n-1]的第p个窗口中的内容应该等同于 diff file[q] file[p] for 0 <= q < p

所以你需要的可能只是用一个函数对它们依次ediff,然后把buffer列出来。

ediff 本身只支持最多比较 3 个。

另外老一点的 vim 最多只支持 5 个,上限写死在源码里了

1 个赞

6个文件估计不好展示。

如果你只是想要差异结果,而不是要在屏幕上进行合并操作,不如直接用 diff 命令:

diff -u --from-file 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt...

或者包装一下,在 Emacs 里调用。