智慧'FF-发现 - 其他 - file`(Smarter `ff-find-other-

2019-10-20 03:07发布

我工作在源在以下目录structe组织的项目:

./source/include
./source/include/analysis
./source/include/tools
./source/include/utils
./source/include/utils/stream
./source/include/utils/string
[...]
./source/src
./source/src/analysis
./source/src/tools
./source/src/utils
./source/src/utils/stream
./source/src/utils/string
[...]

其中的每个子目录./source/include/ (包括./source/include/ )包含头文件。 同样的每一个子目录./source/src/ (包括./source/src/ )包含实现文件。

当使用ff-find-other-file上驻留在“顶级”的文件(即./source/include /或./source/src/ )一切工作正常。 不过,我想不出一个如何配置ff-search-directories向上和向后搜索深入到目录树。

有已经在一个问题SO( emacs的FF-发现,其他文件和FF-搜索目录不是递归 ),但它并没有解决我的问题,因为这仅适用于静态设置。

理想的解决方案是这样的(伪正则表达式解决方案,其中DIR_REGEXP匹配所有可能的目录名):

"../\(DIR_REGEXP\)/include/\1/"
"../\(DIR_REGEXP\)/\(DIR_REGEXP\)/include/\1/\2/"

是否有任何的elisp片断/包在那里它可以提供一个解决方案?

Answer 1:

该评论是非常全面的,我认为:

M-x find-library RET find-file RET

对于给出的示例ff-search-directories是:

;; SEARCHING is carried out in a set of directories specified by the
;; ff-search-directories variable:
;;
;;     ("." "../../src" "../include/*" "/usr/local/*/src/*" "$PROJECT/src")
;;
;; This means that the corresponding file will be searched for first in
;; the current directory, then in ../../src, then in one of the directories
;; under ../include, and so on. The star is _not_ a general wildcard
;; character: it just indicates that the subdirectories of this directory
;; must each be searched in turn. Environment variables will be expanded in
;; the ff-search-directories variable.

如果这是不够的, ff-other-file-alist可以包含可以动态地采取行动,“返回由相应的文件可能的名称列表”的功能符号。 看到的使用ff-cc-hh-converter (其在库中定义为参考)。



文章来源: Smarter `ff-find-other-file`
标签: emacs elisp