【问题标题】:emacs ff-find-other-file does not find my headeremacs ff-find-other-file 找不到我的标题
【发布时间】:2016-06-23 11:21:37
【问题描述】:

不知何故,我无法让 emacs'ff-find-other-file 获取我的头文件。这是我所拥有的(最小示例):

cd ~/tmp
mkdir test
cd test
mkdir -p src/a/b inc/a/b
echo "aaaa" > src/a/b/a.cpp
echo "bbbb" > inc/a/b/a.hpp
tree

给予:

.
├── inc
│   └── a
│       └── b
│           └── a.hpp
└── src
    └── a
        └── b
            └── a.cpp

这类似于我的项目结构。


emacs -Q src/a/b/a.cpp

然后将其复制到*scratch* 并使用C-x C-e 执行:

(setq cc-search-directories '("." "../inc" "../inc/*" "../../inc/*" "../../../inc/*" "/usr/include"))

在缓冲区a.cpp 中运行ff-find-other-file,只会在小缓冲区中产生提示:

Find or create a.hpp in: ~/tmp/test/src/a/b/

C-h vff-search-directories 上返回cc-search-directories,在cc-search-directories 上我得到上面的列表。

我希望ff-find-other-file 查看../../../inc/*,并找到a.hpp。为什么不呢?


编辑:似乎是递归部分在这里不起作用。

之后:

cp inc/a/b/a.hpp inc/

a.hpp 是从a.cpp 中找到的。

关于ff-search-directories的帮助说:

星号不是通配符:它们与 前面的斜线。星号代表所有子目录,除了 `..',每个子目录都会被依次搜索。

请注意,此引用来自ff-search-directories 的帮助,而我修改的列表是cc-search-directories。我不明白为什么这会有所作为。

SO 上的这个和其他线程让我相信* 会递归搜索目录树。错了吗?

【问题讨论】:

    标签: emacs


    【解决方案1】:

    * 代表其父级的每个直接子目录;仅此而已。

    评论的措辞更清楚:

    星号不是通用通配符:它只是表示该目录的子目录必须依次搜索。

    即对于这个具体的例子,我希望"../../../inc/*/b" 能够工作。或者确实是"../../../inc/*/*"(正如你最终使用的那样)。

    另请参阅https://stackoverflow.com/a/23662870/324105,并特别注意您可以定义函数以动态生成目标文件路径。

    我怀疑您希望根据原始路径确定 a/b,因此将适当路径返回到其他文件的函数将是您最好的解决方案。

    【讨论】:

      【解决方案2】:

      另一个选择是使用 Projectile 并执行projectile-find-other-file 命令。由于 projectile 知道你的项目结构,它会自动匹配你的 cpp/h 文件。它比 ff-find-other-file 慢一点,但它似乎做得很好。

      【讨论】:

        【解决方案3】:

        哦,搜索结果毕竟不是递归的。这里的这些其他问题和答案让我误读了帮助(在问题中引用)。

        “将依次搜索这些子目录中的每一个”,并不意味着也将搜索它们的子目录。

        由于我的树的深度有限,我只是修改了我的cc-search-directories

        (setq cc-search-directories '("."
                                      "../inc" "../inc/*" "../../inc/*" "../../../inc/*"
                                      "../../inc/*/*" "../../../inc/*/*/*"
                                      "../src" "../src/*" "../../src/*" "../../../src/*"
                                      "../../src/*/*" "../../../src/*/*/*"
                                      "/usr/include" "/usr/local/include/*"))
        

        【讨论】:

          猜你喜欢
          • 2013-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-31
          • 1970-01-01
          • 2013-01-02
          • 2021-10-23
          相关资源
          最近更新 更多