有谁能接说下lsp-mode该怎么配置? 比如说做python开发,python, javascript, html这三种语言怎么使用lsp? 装了lsp-mode怎么让他生效? 需要先把Microsoft/language-server-protocol 装起来么? 但是Microsoft/language-server-protocol 怎么装哦? 人很笨, 大佬们,该怎么配置哦?
恕我直言~游戏要自己玩才有味儿~
看这个介绍?
没有调查没有发言权。
据我个人体验,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。
-
各个语言的 ls 进展是不一样的
是什么样的问题:lsp-mode 基础设施的问题,还是具体某个语言 ls 的问题,可以明确说出来,看看大家有没有遇到,或有什么方法可以解决。这才是有意义的讨论。
-
讨论的前提是 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 请分享出来。
company-lsp好像不能传递trigger char?
我这里退出emacs的时候,cquery好像是被kill掉了,不是正常退出,导致lsp收到信号后再kill一次
不知道lsp-mode怎麼處理的。LanguageClient-neovim裏看起來退出正常
你是說https://microsoft.github.io/language-server-protocol/specification 裏 triggerCharacters
不能設置?沒看到lsp-mode裏有設置這個的地方。
Great idea. Sent a PR
company-lsp可以获取到cquery支持的triggerCharacters, 也可以根据这个检测是否触发补全, 照理说给cquery发送补全请求的时候应该把当前的trigger char也发过去, 但是没有. 导致cquery那边的一些trigger char相关的过滤条件没法生效.
company-mode自己的逻辑也有点问题, 让backend无法记忆trigger char.
貌似我是你说的典型的舍近求远人士: irony + r/gtags
,python-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用不起来…