imenu依赖于semantic-mode

我在用emacs开发c++的时候发现, imenu依赖于semantic-mode. 也就是说, 打开semantic-mode的时候, imenu工作正常, 能够列出当前buffer所有的类成员函数. 但是如果不开semantic-mode, imenu彻底失效. 因为semantic-mode打开的情况下, emacs反应有点慢, 而且每次写注释的时候都会对系统头文件进行索引, 常常造成emacs卡顿. 所以我想把semantic-mode关掉.

BTW, 整个C++工程定义在独立的命名空间(namespace)中, 而且命名空间所有的类定义, 函数定义都采用了缩进.

大家在用imenu的时候有没有遇到这种问题. 是怎么解决的? 这个问题困扰我很久了, 一直没有找到解决办法.

一个namespace里,但是是多个文件里的?那估计是semantic-mode自己有个复杂的实现,可以看看变量imenu-create-index-function的值,然后看看那个函数的实现。觉得卡又实在要用,可以设置成idle 30秒再重索引之类的,陈斌的博客有讲(用ctag还是gtag时)当idle的时候再重建tag文件的文章,可以找找。

M-: imenu-create-index-function -> lsp--imenu-create-index

M-x imenu時lsp-mode會發送textDocument/documentSymbol請求,很多language server不支持,cquery支持

  • 对, 是在多个文件中的.
  • 变量imenu-create-index-function为imenu-default-create-index-function.
  • 我下来试试第三个方法

把imenu-create-index-function改为lsp–imenu-create-index, 还是和原来一样, 没有反应.