一次在Emacs中打开多个文件

23

在Emacs中使用ido-mode允许我使用C-xC-f从迷你缓冲区打开一个文件。这种方法每次只能打开一个文件。

如何打开目录中的所有文件或指定多个要打开的文件?


2
我不确定这个解决方案是否适用(因此有注释),但是结合emacsclient(参见https://dev59.com/o2855IYBdhLWcg3wPBtx),您也可以在命令行中使用“find”。要在emacs中打开所有Clojure文件,我会这样做:`` emacsclient find . -type f -name“*.clj” `` - Christophe De Troyer
2个回答

18

您可以将文件名只输入*,然后按下Enter键;系统会询问您是否确认打开所有文件,如果您再次按下Enter键,系统将会打开目录中的所有文件。

需要注意的是,“打开一个目录中的所有文件”会打开该目录下所有子目录的dired buffer。

在不使用ido-mode的情况下(即基本的Emacs查找文件提示符),您可以使用相同的*来打开目录中的所有文件。但是当您使用ido-mode查找文件时,您可以随时按下C-f键返回到通常的Emacs查找文件提示符。(您可以使用ido加快访问您首先感兴趣的某个目录并在其中跳转到基本的查找文件功能)。这是一种使用ido创建新文件的方法(另一种是C-j绑定);同时,它还提供了另一种使用上面提到的*技巧的方式。


@~unutbu:你用的是哪个版本的Emacs?我用的是23.1.50.1(使用Emacs捆绑的ido.el),我刚刚检查了一下,即使没有我的配置,也可以正常工作,无论是否使用ido。 - Michał Marczyk
2
@~unutbu: 实际上,有一个名为find-file-wildcards的变量需要设置为非nil值才能使通配符扩展起作用。请参见/usr/share/emacs/<version>/lisp/files.el.gz(请根据您的平台调整此路径;或者说C-h f find-file <RET>,然后在files.el上按下<RET>),第1314行(在我的版本中),在find-file函数的定义中。如果这有帮助,请告诉我,我会编辑答案以考虑它。 - Michał Marczyk
@Michal:感谢您的帮助!我在我的.emacs文件中有(require 'ffap)。当我删除(require 'ffap)时,我得到了您描述的行为。 - unutbu
@unutbu:没问题!很高兴现在它对你有用。 :-) 就我所知,ffap 应该根据 find-file-wildcards 的值来调整其行为 - 没有保证,但也许你想在 `/.emacs中尝试一下(setq find-file-wildcards t)`。 - Michał Marczyk
3
使用默认设置的ido-modefind-file-wildcards,Emacs 23.2.1版本在按下C-x C-f后输入*.txt会打开一个名为*.txt的文件。请注意,这只是一个文件名,而不是匹配该模式的所有文件。 - SabreWolfy

3

文件名匹配远不如更通用的模式匹配实用。

Icicles文件名完成中,您可以从同一迷你缓冲区打开与任意数量模式匹配的任意数量文件。模式匹配可以是子字符串、正则表达式、模糊或前缀,并且您可以使用交集和补集组合模式。

就像在Ido中一样,在Icicles中,您的迷你缓冲区输入动态过滤文件名候选项。您可以选择单个候选项或选择所有当前匹配的候选项(使用C-!)。

(当然,您也可以使用文件名匹配。与Emacs文件名输入一样,对于通配符(grok)模式,按下RET将其发送到find-file,打开所有匹配的文件。)


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