吐槽一下lsp-mode

大家好~

我是lsp-mode的重度用户,日常用它来写写python。用lsp-mode得一年多了吧,大多数时候还是很顺手的,但是有的时候总会发生一些莫名其妙的事情,不知道大家有没有遇到过:

  1. 原来好好的自动补全突然不奏效了,有的时候连定义的局部变量都补全不出来(但是可以弹出一些其他的变量……)
  2. 十分恼人的flymake……我明明已经设置了(add-hook 'python-mode-hook (lambda () (flymake-mode -1))以及(setq lsp-prefer-flymake nil),但是当我出现问题,调用lsp-restart-workspace的时候,flymake会莫名其妙地被重启。
  3. 对于有的代码库,lsp-find-definition莫名其妙地不管用,连局部变量都找不到在哪里定义的。但是对于另一些代码库,这个功能又是好的。

如上的这些bug,各位高手有没有遇到过?怎么解决呢?

1 个赞
  1. 可能是在index或者是由于当前buffer未写入文件,导致不能补全。
  2. (setq lsp-prefer-flymake nil)只是不使用flymakelsp-mode会启用flycheck。而且这个变量已经被标记为obsolete了,建议使用lsp-diagnostic-package代替。通常我的办法是设置(setq lsp-diagnostic-package :flycheck),并关闭(setq lsp-flycheck-live-reporting nil)。然后令flycheck只在保存文件、刚开启的时候检查。(setq flycheck-check-syntax-automatically '(save mode-enabled)).
  3. 具体情况具体分析,最好打开lsp-log然后看 server 回复的内容是什么
4 个赞

我的项目应该已经index完了,因为我是在emacs daemon上写程序,language server常年开着。我以前也以为是buffer没写入文件导致的,但是写入了之后好像还是不奏效,很迷。

学到了,过会儿试试看~谢谢

注意一定要把这个关闭,不然非常容易出现提示不对的情况

其实很多emacs package都让我感到很痛苦,不是因为这个package功能不强,而是经常会出现很多莫名其妙的bug,需要用户各种tweak才能解决。

引用大佬的话(字数补丁

3 个赞

disable flycheck-mode in lsp-mode 有点bug,需要改下源码。我试过了,这样work。不过, 不知道flymake的情况

可以试一下noC

是nox吗?已经开始试用了~很清爽,也很快速。 有一个小问题啊。在用python的时候(搭配ms-pyls),当import 某个包库的时候emacs会变得非常卡顿。我附上了一个mem+cpu profile的截图:

我对elisp不太熟,看不出什么东西,请大神看看,也许可以辅助性能优化?

环境:Ubuntu 16.04 Emacs 27.0.60

最好给个 import 哪个包? 这样可以对比分析

比如from PIL import Image 在我计算机上,当打字到import的时候已经出现比较严重的卡顿、拖慢了

vscode jetbrains用户用的多数是官方提供的功能,它们多半是很难很难发现bug的,而稍微容易点出bug的社区插件呢,多数用户可能一共就装了那么三五个,那总的来说碰上bug的几率就比较小。相反一个Emacs用户呢,起码得有三五十个插件是社区提供的。再加上些你自己写的东西。而且它们用的Emacs提供的基础设施也就那么点,很容易就用了同一个API然后boom……

1 个赞

结果大佬现在天天在抹翔,哈哈哈 :joy:

200个到300个插件是正常水准吧。如果就用 stable.melpa.org , 不会有什么问题。

我的python用的pyls做backend,遇到tensorflow的包都补全不了。。。numpy这种倒是可以

查了进程中的pyls,发现原来是我自己的问题。。。启动emacs的时候要先切到虚拟环境,否则运行的是其他环境的pyls

所以吐槽前还是要先搞清楚啊 :joy::joy::joy:

本以为spacemacs已经够开箱可用了,结果还是有很多坑。。。 :rofl:

是在打开python文件前切换么?还是在打开后,利用pyenv切换?

感觉和spacemacs 也没关系吧,它怎么知道用哪个环境运行pyls