是否可以在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
类型(我想是一个字符串列表)。我尝试在(car )
的返回值上使用file-expand-wildcards
以获取第一个匹配的文件名。但Emacs仍能正常启动。
任何指针?
答案 0 :(得分:1)
尝试file-expand-wildcards
:
file-expand-wildcards
是files.el
中已编译的Lisp函数。
(file-expand-wildcards PATTERN &optional FULL)
展开通配符模式
PATTERN
。这将返回与模式匹配的文件名列表。
如果将
PATTERN
写为绝对文件名, 价值也是绝对的。如果将
PATTERN
写为相对文件名,则会对其进行解释 相对于当前默认目录default-directory
。返回的文件名通常也与当前文件名相关 默认目录。但是,如果
FULL
为非零,则它们是绝对的。
这会为您提供扩展列表。选择第一个或任何你想要的。