关于用 language server protocol 来对 Python 进行补全的体验。

Doom Lsp Elpy Anaconda

在 Emacs 中分别用 Anaconda-mode, Elpy, Lsp-mode(Language Server Protocol) 这些热门的 Python 插件实验了下。

把光标放在函数上,minibusffer(Emacs底部) 会显示出 Eldoc 信息。前两者没法实现精确定义,比如把光标放在 np.median 上,没法正确地返回实例的方法的信息,而 Lsp-mode 做到了。

比 Emacs 自带的全靠正则表达式搜索强多了。而这只是其中一个强项而已,之前很多 Emacs 被诟病的缺陷也将随着 Lsp 的发展而被解决。

现在还有些缺点,比如写代码时会有(可接受范围的)卡顿,有时补全时会有 Error 提示,等等之类的问题。既五月 RMS 提出支持 LSP 时,过了短短4个月就可以满足基本的需求了,估计用不了多久写代码的感觉就和在 Visual Studio 等 IDE 上一样的体验了,Emacs 的前景一片光明。 ,

5 个赞

lsp-mode 还没有 company 后端吧?

估计明年的这个时候就成熟了,到时候什么 anaconda,elpy, 都拜拜吧

1 个赞

还没在 Lsp-mode 中找到关于 Company 的代码~~,还好今天试了下 Lsp-mode ,太惊艳了。

唉,就是没时间,要是有时间的话,我也给它写个后端什么的,加速其进展。

上个提到python的lsp的帖子就想惊叹一下了。。

话说达到vs和jetbrains全家桶的体验可能还不至于,他们的静态分析都不开源的。不过我等前端脚本小子就有福了,到时候vs code有什么emacs就有什么(vim党不知道有没有搞类似的lsp接入),emacs严格大于vs code,兴奋.jpg

*edit:*不过比如lsp-java用的eclipse相关项目的核,虽比不上IDEA但起码也是IDE级别了;在lsp-python项目下看到gif中的编辑器是vs code,lsp真是统一编辑器各派别的历史性的设想,以后真正每个人选想用的编辑器,同时又能用上所有人一起搞的最好的后端,持续兴奋.jpg

还有什么ctags, etags, gtags, ggtags,也都拜拜啦

我几个月前用了一下, 开了一个5,6千行的py文件,然后卡死了。。。 然后就放弃了,不知道现在还会不会这样

:rofl::rofl:越来越邪乎啦

Org-mdoe 写 Python 代码时,实现了 Keymaps。

对就是 John 老师这篇文章所要实现的功能,看样子 Lsp-mode 不仅能实现 IDE 式的补全,精确定义等,而且能和 Org-mdoe 很好的结合在一起。

lsp-mode 是用completion-at-point 来补全的吧

在company默认的backends中有一个叫company-capf就是以completion-at-point-functions来补全的,所以不需要再弄个后端吧

好奇一下,是否可以将这些插件混合使用,即 elpy+anaconda+ lsp-mode :rofl:

没有这个必要啊 功能是重复的 比如anaconda-mode是用jedi作为static analysis backend, python 的language-server其实也集成了jedi 更好的搭配是lsp-python + conda.el/virtualenv.el 因为现在lsp-python还没有选择virtualenv的功能

BTW几个月过去了,得益于lsp-ui,现在lsp的体验好了不少

看起来很赞,我都觉得这个是 vs-code 了,之前我一直使用的是 elpy+anaconda, 之前尝试过 lsp-mode 只是总会遇到一些奇怪的问题,体验不好,所以就没有尝试。话说 lsp-ui 需要 emacs-26?

有人給 spacemacs 做 lsp layer 嗎?

只有 lsp-ui-doc 用 child frame 需要 emacs 26

表示在 Windows 下, lsp-modelsp-ui 以及 rls 经常挂,直接弹窗 “xx程序已经停止运行”,也没办法调试. 顺便报个bug(应该算bug):

sideline 过长,然后变成下一行了,既然有了sideline, 下面的 eldoc应该不用显示了?

  • 系统信息: Window7
  • Emacs 版本: emacs-25.3
  • lsp-ui 版本: lsp-ui-2018-0116

eldoc不用显示+1。。现在的eldoc动不动就跳出来半个window…干脆关掉了

哥你这个tooltip的效果怎么搞的啊,我查半天也没找到类似的美化

这个是 lsp-ui

lsp-ui-doc加一些自己的修改

1 个赞