亲测:lsp-python-ms vs pyls 性能

我用的是 2011 年的笔记本,性能比较渣,有时候按 TAB 阻塞,直到补全列表出来(或者提示 Timeout)才能继续操作。

而 vsc 从来没遇到这种情况。我并不是说 vsc 快,实际在我的破电脑上,补全也是要等的。但是我可以选择不等待,继续输入,没有丝毫阻塞。

所以我对 lsp(或者 Emacs)的异步表现有所怀疑,把锅都甩给 json 可能有失公平。

不仅仅是 c/s 之间通信需要异步,UI 的更新也应该要异步,否则无法真正解决卡顿问题。

Emacs的小短腿,我觉得lsp得用dynamic-module,从connection到UI都交给外部实现才行。

Dynamic module解析JSON很难给lsp加速,因为dynamic module每次都要吧lisp string拷贝出来再把原生数据结构拷贝回去,一来一会的十分耗时

你说的这种现象很可能是company-lsp的锅,你可以profile看看就知道了。

一直 code analysis is in progress … 这个怎么破? 没有用过 lsp,如果换虚拟环境的话会重新索引吗?这个索引时间真的有点长。

我这边配置之后,lsp一直在加载lsp-mode默认的python后端,pyls,不知道这个怎么debug?也没有报错。

检查你配置/安装是否正确。

lsp-python-ms 安装之后,会注册一个 mspyls,它的优先级高于 pyls。

但是如果 mspyls 找不到对应的可执行文件,就会去启用 pyls。

这几个问提你需要去排除。

1 个赞

你要在调用(lsp)函数之前加载lsp-python-ms

1 个赞

必须(require 'lsp-python-ms).

1 个赞

我能够用lsp-ms-python,但是我总感觉补全特别卡,跳转还好,你有什么针对lsp补全额外的配置吗?

这个都还卡就没辙了,现在应该是性能最高的了,用C#开发的server,多线程比python好太多。理论上和VSCode差不多的。是用的Emacs27吗?不是就换成27试试。

感觉可能是client端的问题,vscode效果非常棒

我这里还行啊,用pandas都不卡,比用pyls体验好太多

emacs

打算直接用你的配置试一下,我用的doom,系统是mac os mojave。 BTW,假如我想在你的配置的基础上加入evil,你觉得工作量大吗? 有没有什么建议?

不大,直接把evil的配置加到~/.emacs.d/custom-post.el中就可以了。我自己测试时加过evil package,很方便。只是其他包和兼容的代码需要你自行加了,我想这个也不难。

感觉好像是快不少,写了个懒人script找vscode的executable。。。懒得安装那么多东东。

(def-package! lsp-python-ms
  :demand nil
  :hook (python-mode . lsp)
  :config
  ;; for executable of language server, if it's not symlinked on your PATH
  (setq lsp-python-ms-executable
        (string-trim (shell-command-to-string
         "fd -a ^Microsoft.Python.LanguageServer$ $HOME/.vscode/extensions | tail -1")))
  ;; for dev build of language server
  (setq lsp-python-ms-dir
        (file-name-directory lsp-python-ms-executable)))
4 个赞

26上有人用过的说一下体验。感觉是不是必须要27

我的lsp-python-ms在emacs26下运行不卡,只是我还没尝试numpy

我26.1卡的不行

我感觉是lsp-python-ms 这个client配置,可能在不同平台表现不一样,我在win10上 是卡的爆炸,基本不能用。

我的一直提示LSP:: No LSP server for python-mode,能看一下你的配置吗