在emacs的find-file中,是否可以从可能的完成中删除./和../,以便更快地完成选项卡的完成?

时间:2015-08-11 17:16:50

标签: emacs

我们有一个大型项目,无论出于何种原因,它都有许多嵌套目录,这些目录中通常只有一个嵌套子目录,例如

perl-thing/lib/PACKAGE/SUBPACKAGE/X.txt

在终端中,很容易浏览这个,因为我只是点击了很多次,最终它自动完成到X.txt,因为它是SUBPACKAGE中唯一的对象。

在Emacs中,使用find-file,我必须点击p然后选项卡来获取perl-thing,然后是l-tab for lib,P-tab for PACKAGE等,这会减慢到X.txt的速度。这似乎是由于查找文件列表./和../可能与单独的子目录一起完成。

是否可以删除./和../完成候选项,以便我可以使用选项卡快速浏览目录列表结构?或者我应该使用find-file以外的东西吗?

1 个答案:

答案 0 :(得分:1)

您可以使用自己编写的read-file-name - 函数忽略./../并将其设置为默认值,如下所示:

(defun read-file-name-nodots (prompt &optional dir default-filename mustmatch initial predicate)
  "Like read-file-name-default but does not complete on ./ and ../"
  (let ((predicate (or predicate (lambda (f) (not (or (string= f "./") (string= f "../")))))))
    (read-file-name-default prompt dir default-filename mustmatch initial predicate)))
(setq read-file-name-function 'read-file-name-nodots)