使用了一下lsp-mode, 距离成熟还很远。

平台是虚拟机中的archlinux emacs 版本26.1

分别试用了lsp-clangd lsp-go 配置使用的是最简单配置 (require 'lsp-mode) (setq lsp-response-timeout 2) (setq lsp-message-project-root-warning nil)

(require 'company-lsp) (push 'company-lsp company-backends)

(require 'lsp-clangd) (add-hook 'c-mode-hook 'lsp-clangd-c-enable) (add-hook 'c+±mode-hook 'lsp-clangd-c+±enable)

(require 'lsp-go) (add-hook 'go-mode-hook 'lsp-go-enable)

c/c++中遇到的问题:

  1. 补全会多出一个空格, 比如a.xxx 补全完成后默认变成a. xxx
  2. 补全完成后,补全的函数的参数, 不能默认选中,光标会到function结尾。要回头删除参数声明
  3. 不能显示函数的document
  4. 不能使用company的location功能, 目前我使用的只有semantic和elisp的支持location功能, company-clang的也不支持

go中遇到的问题: 多出一个空格的问题,消失了 其他的同上。

此外lsp貌似是针对每一个buff,启动一个lsp server, 这样如果我开百八十个文件的话,会不会变卡?

和我之前配置的company + semantic company-clang company-go比的话, 试用体验不佳。 emacs中lsp-mode距离成熟还有一段路要走。

我在用lsp-go没有遇到你这些问题。 第四个没用过,不知道啥意思。

不过我使用lsp-mode+company-lsp也有一些bug。

  1. company-lsp好像缓存有问题,偶尔补全会乱掉。自从禁止掉后没再出现。
  2. 偶而补全函数的时候会缺少一个)号。

看起来,你的配置要走的路更长。

1 个赞

我之前也试过,现在老老实实地用company的clang后端补全。

我想试用一下lsp,go我装的是bingo,rust是rls

c/c++ 大家装的是什么lsp?

我现在用lsp-mode + clangd。虽然功能没有cquery和ccls多,但是比较稳定。

不错啦,你起码跑起来了,我一月初试lsp for Python都跑不起来,不行的跳error而且freeze python mode。一直git revert到6月份,才拿到个能用的版本。

我现在用的是ccls 其实也没有用他什么特别的功能,不过也还挺稳定的呀

现在已经稳定可用了。有问题去 github 提交 issue 就好了

我都不依赖补全了,只用了基本的补全,配合gtags,发现写代码也没什么阻碍。就是有的得看着手册写,感觉还好。不用折腾了

我折腾了两天ccls没折腾明白,今天才知道,原来不是操作步骤的问题,在Mac机器上用bear等工具生成compile_commands.json和.ccls文件,需要关SIP。感觉lsp比tags的方式先进很多。