26.9.6 文件名补全

本节描述用于文件名补全的底层子程序。更高阶的函数请参见 读取文件名

Function: file-name-all-completions partial-filename directory

该函数返回目录 directory 中所有以 partial-filename 开头的文件的完整补全列表。补全项的顺序与目录中文件的顺序一致,该顺序不可预测且不携带有效信息。

参数 partial-filename 必须是不包含目录部分、不含斜杠(部分系统中为反斜杠)的文件名。如果 directory 不是绝对路径,会在前面拼接当前缓冲区的默认目录。

下面的例子假设当前默认目录为 ~rms/lewis,其中有 5 个文件名以 ‘f’ 开头:foofile~file.cfile.c.~1~file.c.~2~

(file-name-all-completions "f" "")
     ⇒ ("foo" "file~" "file.c.~2~"
                "file.c.~1~" "file.c")

(file-name-all-completions "fo" "")
     ⇒ ("foo")
Function: file-name-completion filename directory &optional predicate

该函数在目录 directory 中对文件名 filename 进行补全,返回所有以 filename 开头的文件名的最长公共前缀。如果 predicatenil,则会忽略不满足该谓词的补全项;调用该谓词时会传入一个参数,即展开后的绝对文件名。

如果只有一个匹配项且 filename 与其完全一致,函数返回 t。如果目录 directory 中没有以 filename 开头的名称,则返回 nil

下面的例子假设当前默认目录中有 5 个文件名以 ‘f’ 开头:foofile~file.cfile.c.~1~file.c.~2~

(file-name-completion "fi" "")
     ⇒ "file"

(file-name-completion "file.c.~1" "")
     ⇒ "file.c.~1~"

(file-name-completion "file.c.~1~" "")
     ⇒ t

(file-name-completion "file.c.~3" "")
     ⇒ nil
User Option: completion-ignored-extensions

file-name-completion 通常会忽略以此列表中任意字符串结尾的文件名。当所有可能补全都以这些后缀之一结尾时,则不会忽略。该变量对 file-name-all-completions 无影响。

一个典型取值如下:

completion-ignored-extensions
     ⇒ (".o" ".elc" "~" ".dvi")

如果 completion-ignored-extensions 中的元素以斜杠 ‘/’ 结尾,表示匹配目录。以斜杠结尾的元素不会匹配目录;因此上面的值不会过滤掉名为 foo.elc 的目录。


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike