lsp-mode怎么用?

有谁能接说下lsp-mode该怎么配置? 比如说做python开发,python, javascript, html这三种语言怎么使用lsp? 装了lsp-mode怎么让他生效? 需要先把Microsoft/language-server-protocol 装起来么? 但是Microsoft/language-server-protocol 怎么装哦? 人很笨, 大佬们,该怎么配置哦?

恕我直言~游戏要自己玩才有味儿~

1 个赞

看这个介绍?

没有调查没有发言权。

据我个人体验,c 的 cquery、go 的 go-langserver 和 python 的 pyton-language-server 已经不输 IDE 了。

php-language-server 是个半成品,java 的 jdt.ls 也还不堪用。其他没试过,看起来 javacript-typescript-server 应该也能用了,毕竟用的是微软的解析器,并且 lsp 就是微软发起的。

lsp-mode现在很多问题是错误信息很不友好。

比如lsp workspace最后一个buffer退出,(message "/tmp/d/: lsp-cquery has exited (killed)"),像是崩溃了被强行关闭一样。

真的发生crash了,一两个月前我C-x b把相关buffers kill掉重新打开就好了,现在似乎缓存在某个lsp-xxx-workspace变量里了,(setq lsp--workspaces (make-hash-table :test #'equal))重新定义能解,不需要重启emacs。

  1. 各个语言的 ls 进展是不一样的

    是什么样的问题:lsp-mode 基础设施的问题,还是具体某个语言 ls 的问题,可以明确说出来,看看大家有没有遇到,或有什么方法可以解决。这才是有意义的讨论

  2. 讨论的前提是 Emacs

    所以,如果你说“其他”是 jetbrains 全家桶、visual studio。。。只从 IDE 的角度看那确实是有差距。

而如果想要继续 Emacs,写 c 不用 cquery,那只能在各种 ycmd、irony 和各种 tags 工具中挣扎了,更多请参考 @MaskRay 的总结 C++代码索引工具现状

写 python 如果不用 lsp-python(+python-language-server),转而去配置 python-mode + jedi 的话,就是舍近求远了,python-language-server 本身就是基于 jedi,并且增加了大量的特性。

lsp-go(+go-langserver) 的情况是类似的,go-langserver 也是在 gocode 的基础上做了改进。

目前用过的 ls 中,比较完善的就这几个。大家还有用到哪些值得一试的 ls 请分享出来。

3 个赞

company-lsp好像不能传递trigger char?

我这里退出emacs的时候,cquery好像是被kill掉了,不是正常退出,导致lsp收到信号后再kill一次

不知道lsp-mode怎麼處理的。LanguageClient-neovim裏看起來退出正常

你是說https://microsoft.github.io/language-server-protocol/specification 裏 triggerCharacters不能設置?沒看到lsp-mode裏有設置這個的地方。

一直没办法理解,go-language server support list, x 的意思是已经支持,还是未支持呢, 如果是就清晰多了 :rofl:

Great idea. Sent a PR

:joy::joy:. 这PR 合得真快,我还想去围观一下

company-lsp可以获取到cquery支持的triggerCharacters, 也可以根据这个检测是否触发补全, 照理说给cquery发送补全请求的时候应该把当前的trigger char也发过去, 但是没有. 导致cquery那边的一些trigger char相关的过滤条件没法生效.

company-mode自己的逻辑也有点问题, 让backend无法记忆trigger char.

貌似我是你说的典型的舍近求远人士: irony + r/gtagspython-mode + jedi

那我找时间试试lsp-mode对C++和python的支持吧,看到最近它很热啊

https://github.com/cquery-project/cquery/wiki/Emacs

你有空可以改进下

https://github.com/cquery-project/emacs-cquery/blob/master/cquery.el#L98

(defcustom cquery-project-root-matchers
  '(cquery-project-roots-matcher projectile-project-root "compile_commands.json" ".cquery")

lsp-mode [Discussion] project root detection logic

看Emacs的代码很快的。无索引状态textDocument/didOpen文档后那个文档会优先处理的,因此几秒钟就能看到semantic highlighting

还是尽量把emacs-cquery配置起来吧,irony只能补全,ycmd不能references,rtags性能糟糕+索引文件巨大

似乎是美国人的习惯

确实问题很多,不大稳定。

我感觉还行,暂时 python 写的不多,主要是看

看应该还好,写的体验就差了许多。希望尽快成熟吧

spacemacs的lsp用不起来…