lsp-mode 目前似乎成熟了?

lsp

#1

大半年前使用lsp-mode感觉不是很稳定,今天试用了下,似乎成熟了很多,但还没有下定决心全面转向LSP。 大家有多少人在使用lsp-mode呢,有什么感受没有?对lsp-ui怎么看? 如果真的成熟稳定了,我会将Centaur Emacs 彻底转向LSP配置。

大家各抒己见吧,意见多多益善,谢谢啦!


#2

lsp-mode啓動的language server異常退出時,lsp--workspaces裏記錄不會清除。關閉和該workspace關聯的所有buffers再重新打開依然不會啓動新language server實例。

(defvar lsp--workspaces (make-hash-table :test #'equal)
  "Table of known workspaces, indexed by the project root directory.")

(setq lsp--workspaces (make-hash-table :test #'equal)能復原,不需要重啓Emacs。

不支持tramp。有個lsp-define-tcp-client,不知道有沒有人用。

有熱情和上游LSP制定者討論的話可以看:

等到document symbol hierarchyhttps://github.com/Microsoft/vscode-languageserver-node/pull/346成熟

能修lsp-ui bug的話強烈歡迎,我可以merge的(但我的Emacs水平很菜XD)

lsp-mode有個gitter https://gitter.im/emacs-lsp/lsp-mode但不太活躍。 如果用C/C++/ObjC的話,可以考慮鄙人的https://gitter.im/ccls-project/ccls(今天支持system include path推導了,macro replacement-list裏的索引也很棒了。依賴Clang C++很多libs,編譯鏈接很可能比cquery慢)

下面一些私貨(如果你開發C/C++的話,可能會有幫助,即使你是cquery用戶(

ccls有一些cquery不支持的xref拓展。

可以看這幾個檔案:

  ;; References w/ Role::Dynamic bit (macro expansions)
(defun ccls/references-macro ()

#3

以我偶尔使用的体验来看,稳定度还欠佳。当由于某些内部/外部的原因 server 进程终止以后,lsp-mode 再也无法重启动一个新的 server 进程,只有重启 Emacs 一条路。


#4

谢谢您的分享。看起来可以包装一个clean-lsp或者restart-lsp之类的function,来解决language server异常退出的情况。 @twlz0ne 你可以试试这个方案,重启Emacs太麻烦。

另外,不知道 https://github.com/joaotavora/eglot 用起来会不会好些,目前看功能还不是很多,好处是out of box。


#6

今天发现一个内部函数,应该可以解决server异常退出的情况。参考lsp-restart-workspace。根据文档,会shutdown相关进程然后restart。


#7

Centaur Emacs 准备好彻底转向LSP了吗?期待…


#8

cnetaur-emacs已经默认启用lsp了。请先安装相应的langserver。


#9

谢谢,赶紧去试试。


#10

intel的cpu好像发展的不快了 arm发展的很快

没人讨论 也就成熟了


#11

更新了README,FAQ里有怎么安装LSP的描述。目前使用起来还是不错的。


#12

好像没有支持 lsp-php呀


#13

目前个人没有使用php,确实没有支持。不过很容易加进去。


#14

lsp-mode 好像不支持临时 buffer ?


#15

已经支持了,但我没测试。你可以更新试试


#16

是的,必须保存到文件,否则langserver找不到


#17

尝试了一下,貌似没有原来的ac-php好用。

但是还是谢谢了!


#18

你指自动补全功能?lsp-php应该更强大些,你看看参数需不需要调整。另外,结合lsp-ui,lsp-flycheck, lsp-imenu, xref等,很接近IDE功能了。提醒下,必须在Emacs26上才能发挥优势。


#19

自动补全是有的,但是候选词非常少。 有可能是设置或者参数的问题。我再继续研究一下


#20

lsp-php (其实应该说 PHP Language Server, 作为前端 lsp-php 是很无辜的) 的问题是,它没有把 vendor 纳入解析范围,所以能补全的东西少:

自己写的代码它能补全,一旦引用了 vendor 就瞎了。


APPEND 2018-09-08 11.36.15

搜罗了一下目前各种 PHP ls 的进展:

# Language Maintainer Repository Features Memo
1 JS + PHP + Python SonarSource https://github.com/SonarSource/sonarlint-core *
2 PHP Felix Becker https://github.com/felixfbecker/php-language-server ****** 也就是 lsp-php 默认的后端,可惜自宫了(不分析 vendor)
3 PHP Hvy Industries https://github.com/HvyIndustries/crane ***
4 PHP Tyson Andre https://github.com/phan/phan ***** 看起来很有希望(功能相对完备,又不排除 vendor): Editor-Support
5 PHP Bmewburn https://github.com/bmewburn/intelephense **

@tobato 可以试试这个 phan,我很久不写 PHP 了。


#21

感谢seagle0128! 我使用的是debian9,emacs版本是25,今天编译安装了26.1,用的是你的最新配置,很好用。 有个问题想请教一下。我自己有一些使用习惯的配置,是直接在你原有的配置上面修改,还是另外弄成一个文件好呢?如果是自己弄成一个文件,那么要怎样做才能够覆盖你的原有的配置?