请问spacemacs索引和补全问题

我现在用的是spacemacs。主要是c代码。

索引 目前用的是global。感觉还挺快挺准的。大项目(例如Linux)感觉比vscode好用,vs有时候会找不到,而且跳转的时候有点慢。

补全 配置了company semantic。只对当前文件中的结构体补全比较好使。对大项目(例如linux)结构体,函数之类的补全就不行了。

spacemacs的lsp-mode还没用起来。不知道各位用的lsp mode对大项目补全是否好用?哪位给介绍一下。

另外。vscode也是用的ccls来索引的对吧?它既然索引还不如emacs+global,那是不是说明,spacemacs + lsp-mode 的索引也会不如global?

可以试试 citre

这个的补全功能会比lsp-mode强么?我在考虑要不要试一下lsp mode。但是折腾半天还没配置起来。

lsp 确实不好折腾,而且大项目可能会卡,对于带宏的语言找的也不会那么准确

对几十万行代码甚至linux源码这样的大项目。各位都用的什么索引和补全?

前面说的citre的索引和global比怎么样?哪位用过给介绍一下。目前我用着只有global的gtags索引是最好的。

作者来回答一下 :wink:

  • 你提到的结构体成员补全,我理解就是敲完 . 以后弹出所有的成员。Citre 暂时还做不到,但有一些计划:Citre: 先进的 Ctags 前端

  • Citre 比起 lsp 优点就是可靠、速度快、在巨型工程里速度基本不变慢。缺点是由于不能准确理解语义,给你的候选会比实际需要的多。对 C 这种没有 namespace 的语言我觉得不是什么问题,而且很多 language server 反过来经常有「想要的没有给我」的问题。我觉得多给我一点好过漏掉。

  • 一般我们用 ctags 就是只会 tag 整个工程,这样外部库就不能补全和跳转了,lsp 不用配就能支持外部库。解法是生成 tags 的时候手动把外部库(或者 system header)的路径加进来,会麻烦一点,但也就麻烦一次。

对 Citre 和 其他工具的长短,我写了详细的文档:https://github.com/universal-ctags/citre/blob/master/docs/user-manual/compare-with-other-tools.md

我可以告诉你 universal ctags 的主要维护者的工作就是搞内核,他用 Citre 阅读内核代码。

多谢。

我说的补全就是这个意思。

但是其实补全不是最重要的,重要的是索引。对索引,global已经不错了,大项目速度也不慢。不知道你用过global没有,citre的索引和global比,效果怎么样?如果差不多,那我就不用切换了。如果好一些,我就折腾一下。

这么说来。我觉着lsp mode可以暂时放一边了。我先看看citre再说。

这个具体看我的文档。

但实际上就算 ctags 的索引不如 gtags,我也推荐 Citre,因为用 citre-peek 读代码非常爽 :wink: 这个是独家工具

多谢。我打算试试这个。至少lsp mode先不折腾了。

lsp mode默认啥都开,只要是卡的东西,功能再强大我都不想用

我在mac上配置了lsp mode。启动什么的都成功了。

索引功能,它有的能找到,有的找不到。我手动打开那个函数的文件后,它又能跳转了。

查找引用也是,有的函数可以找到引用的所有地方。有的又找不到。

感觉完全不能用。

我一般都用我的 color-rg grep 一下,手动检查代码了。

lsp-mode 我只能说实现的不好,看着啥功能都有,又卡又难用。

我也放弃lsp mode了。

你有没有试过 global + pygments 查引用?就是针对 global 原生不支持的那些。

如果效果好的话我想考虑给 Citre 做个 global 插件。

这个我没用过。我一直只用global 弄c代码。python极少用。citre如果能和global配合起来那太好了。

clangd linux内核有生成complie database配置工具

先记下。这几天没时间,等抽空折腾一下。