问题描述:

是否可以在elisp中使用通配符(如*)来扩展文件名?

例如,我看到

(expand-file-name "~/.emacs.d/elpa/babel-repl-20160504.1501") 

扩展到/home/username/.emacs.d/elpa/babel-repl-20160504.1501

是否有一个功能,也扩大包含通配符,这样我们可以做文件名:

(expand-file-name "~/.emacs.d/elpa/babel-repl*") 

(取第一个文件名,如果存在多个比赛)?

我试过以上,但expand-file-name似乎并没有(从Ubuntu的16.04 Emacs的24.5)承认*

- 编辑 -

@Drew我试图(byte-recompile-directory (file-expand-wildcards "~/.emacs.d/elpa/babel-repl*/") 0)但得到了一个错误Wrong type argument: stringp, nil

我不是很熟悉elisp和stringp类型(我想是一个字符串列表)。我试图在file-expand-wildcards的返回值上使用(car)以获得第一个匹配的文件名。但Emacs仍能正常工作。

任何指针?

尝试file-expand-wildcards

file-expand-wildcardsfiles.el编译Lisp函数。

(file-expand-wildcards PATTERN &optional FULL)

展开通配符模式PATTERN

这将返回与模式匹配的文件名列表。

如果PATTERN被写为绝对文件名, 的值也是绝对的。

如果PATTERN被写为相对文件名,它将被解释为 相对于当前默认目录default-directory

返回的文件名通常也是相对于当前的 默认目录。但是,如果FULL非零,则它们是绝对的。

这给你一个扩展列表。选择第一个或任何你想要的。