?
问题描述:
是否可以在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-wildcards
是files.el
编译Lisp函数。
(file-expand-wildcards PATTERN &optional FULL)
展开通配符模式
PATTERN
。这将返回与模式匹配的文件名列表。
如果
PATTERN
被写为绝对文件名, 的值也是绝对的。如果
PATTERN
被写为相对文件名,它将被解释为 相对于当前默认目录default-directory
。返回的文件名通常也是相对于当前的 默认目录。但是,如果
FULL
非零,则它们是绝对的。
这给你一个扩展列表。选择第一个或任何你想要的。