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

这个加了,也没用。暂时回去用原始的 company 了, pyls 没任何问题。company-posframe 是那个 posframe 一直在闪动。 company-box 会有报错。我一会录制一个屏幕。

(require 'lsp-python-ms)

(use-package lsp-python-ms
  :defer t
  :demand
  ; :ensure nil
  ; :hook (python-mode . lsp)
  :config
  (setq lsp-python-ms-dir
        (expand-file-name "~/.local/lib/pls/output/bin/Release"))
  (setq lsp-python-ms-executable
        "~/.local/lib/pls/output/bin/Release/linux-x64/publish/Microsoft.Python.LanguageServer"))

(use-package pipenv
  ; :hook (python-mode . pipenv-mode)
  :hook (python-mode . (lambda () (pipenv-mode) (pipenv-activate) (lsp)))
  :init
  (setq
   pipenv-projectile-after-switch-function
   #'pipenv-projectile-after-switch-extended))

环境是emacs27.0.5,doom emacs

这个找 vscode 里面的 languageserver 的方法,应该推广啊, 我感觉比自己去编译好多了。

在Mac下找不到。。只有一堆py和js文件。

同一个虚拟环境,奇怪的是,vscode直接安装python extension马上就能用了。Emacs如果用自己编译的,还得索引很久…一个多钟还没完成。

这段改成这样更合适

(use-package lsp-python-ms
  :defer t
  :hook (python-mode . (lambda ()
                         (require 'lsp-python-ms)
                         (lsp)))
  :config
  (setq lsp-python-ms-dir
        (expand-file-name "~/.local/lib/pls/output/bin/Release"))
  (setq lsp-python-ms-executable
        "~/.local/lib/pls/output/bin/Release/linux-x64/publish/Microsoft.Python.LanguageServer"))

另外,如果直接用VSCode的插件,直接做一个symlink就行了,都不用单独设置。 参考我的配置:

1 个赞

理论上Win10上应该是没问题的,查查Emacs的其他设置,比如:

(setq company-lsp-cache-candidates 'auto)
(setq inhibit-compacting-font-caches t)

如果安装了vscode,这个方法就挺好。缺点是依赖有点多,除了VSC还要fd。

我突然想到,能否自动下载这个extension,像lsp-java做法一样,就更方便了。

1 个赞

我按照上面的配置,会报中央的错误: Compiler-macro error for lsp–workspace-client: (wrong-number-of-arguments ((t) (_cl-whole-arg cl-x) “compiler-macro for inlining lsp--workspace-client'." (cl-block lsp--workspace-client--cmacro (cl--defsubst-expand (quote (cl-x)) (quote (cl-block lsp--workspace-client (or (lsp--workspace-p cl-x) (signal (quote wrong-type-argument) (list (quote lsp--workspace) cl-x))) (aref cl-x 5))) nil nil nil cl-x))) 1) Compiler-macro error for lsp--client-action-handlers: (wrong-number-of-arguments ((t) (_cl-whole-arg cl-x) "compiler-macro for inlininglsp–client-action-handlers’.” (cl-block lsp–client-action-handlers–cmacro (cl–defsubst-expand (quote (cl-x)) (quote (cl-block lsp–client-action-handlers (or (lsp–client-p cl-x) (signal (quote wrong-type-argument) (list (quote lsp–client) cl-x))) (aref cl-x 11))) nil nil nil cl-x))) 1)

应该是你use-package的配置不一样。试试这个:

(use-package lsp-python-ms
  :defer t
  :hook (python-mode . (lambda ()
                         (require 'lsp-python-ms)
                         (lsp))))

我真的没辙了上午重启emacs还可以正常连接的,下午回来有链接不上了,显示没有服务,我的emacs 26.2的,这到底是什么机制啊

问题不是出自于lsp-python-ms,而是出自于lsp-mode,不晓得是不是因为我用了最新的lsp-mode导致的,我看这个版本是6月18号刚发布的

楼主,刚才又重新clone了你的centaur,新建一个py文件,lsp显示 .py not in project or it is blacklisted,怎么设置?

看见后面的评论让我打消了尝试的念头。。。

确实,系统版本,lsp版本都会影响性能,我还是用简单的anaconda,关注一下lsp的进展就行

我今天一天都被这东西废了感觉

可以参考这两个

不解为什么都在说不行,我用起来体验很好呀,并没有什么问题啊,上面也录了视频。可惜参考下lsp-python-ms的README,照着做不会有问题。

有没有办法选择性的执行 (pipenv-activate) ?毕竟不是所有的文件在虚拟环境中

(use-package lsp-python-ms
  :defer t
  :hook (python-mode . (lambda ()
                         (require 'lsp-python-ms)
                         (pipenv-activate)
                         (lsp)))

这么写太粗暴了。

可能是载入的原因 我重新弄了一下,他还是会有警告 特别导入tensorflow的时候总是有这个警告,爱那里可以关闭呢