不知怎的,我无法制作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"))
并在缓冲区ff-find-other-file
中运行a.cpp
,只会导致迷你缓冲区出现提示:
Find or create a.hpp in: ~/tmp/test/src/a/b/
C-h v
上的 ff-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上的这个和其他线程让我相信http://192.168.4.134:9084/....
会递归搜索目录树。错?
答案 0 :(得分:1)
*
表示其父级的每个直接子目录;仅此而已。
评论的措辞略显清楚:
星号不是一般的通配符:它只是表示必须依次搜索每个目录的子目录。
即。对于这个具体的例子,我希望"../../../inc/*/b"
可以工作。或者确实"../../../inc/*/*"
(因为你已经结束了使用)。
另请参阅https://stackoverflow.com/a/23662870/324105并特别注意您可以定义函数以动态生成目标文件路径。
我怀疑您希望根据原始路径确定a/b
,因此将相应路径返回到其他文件的函数将是您的最佳解决方案。
答案 1 :(得分:1)
另一种选择是使用 Projectile 并执行projectile-find-other-file
命令。由于projectile了解您的项目结构,它将自动匹配您的cpp / h文件。它比ff-find-other-file慢一点,但似乎做得很好。
答案 2 :(得分:0)
哦,毕竟搜索结果不是递归的。这些其他问题和答案让我误解了帮助(在问题中引用)。
"将依次搜索这些子目录中的每一个",并不暗示他们的子目录也将被搜索。
由于树的深度有限,我只修改了cc-search-directories
:
(setq cc-search-directories '("."
"../inc" "../inc/*" "../../inc/*" "../../../inc/*"
"../../inc/*/*" "../../../inc/*/*/*"
"../src" "../src/*" "../../src/*" "../../../src/*"
"../../src/*/*" "../../../src/*/*/*"
"/usr/include" "/usr/local/include/*"))