我的问题是imenu或speedbar /语义由于缩进而失败。对于这个简单的文件,可以:
#include <iostream>
void bar() {
std::cout << "bar" << std::endl;
}
但是,如果我想将功能栏放在 namespace 中并缩进其代码,请执行以下操作:
带有speedbar的
(require 'semantic/sb)
),在Speedbar框架中没有文件标签,并且在迷你缓冲区带有M-X imenu的
失败的示例代码:
#include <iostream>
namespace foo {
void bar() {
std::cout << "bar" << std::endl;
}
}
导致失败的不是 namespace ,而是标识。以下也失败:
#include <iostream>
void bar() {
std::cout << "bar" << std::endl;
}
知道为什么以及如何使其工作吗?
谢谢!!
编辑:好的解决方案确实是speedbar + sementics。它确实有效(我的init.el中出了点问题...)
最佳答案
也许imenu.el
的示例regexp与imenu-example--create-c-index
一起使用:
(defvar imenu-example--function-name-regexp-c
(concat
"^[a-zA-Z0-9]+[ \t]?" ; type specs; there can be no
"\\([a-zA-Z0-9_*]+[ \t]+\\)?" ; more than 3 tokens, right?
"\\([a-zA-Z0-9_*]+[ \t]+\\)?"
"\\([*&]+[ \t]*\\)?" ; pointer
"\\([a-zA-Z0-9_*]+\\)[ \t]*(" ; name
))
开头的插入符号
^
表示行的开头。如果在其后插入[[:blank:]]*
,也会索引带有前导空格的函数定义。我不知道是否喜欢
else if(...) {
...
}
在这种情况下会给出误报。 (你得试试。)
实际上,如果我有足够的时间,我会尝试使用
semantic
或ctags
进行索引。那将更加强大。注意,我没有尝试。我只是看看
imenu.el
。 (当前,我没有太多的空闲时间。很抱歉。)关于c++ - 由于c++模式下的缩进,Emacs imenu和speedbar + semantic失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24408948/