分享一下 company/lsp-mode/company-lsp 的配置, 包括 python 和 ruby 的 server 安装方法

晚上花了一个小时配置了一下 lsp-mode, company, company-lsp , 配置文件在: https://www.emacswiki.org/emacs/init-company-mode.el

怕折腾的同学可以参考一下.

Python LSP 服务端的安装方法:

  • conda info --envs
  • source activate python36
  • sudo pip install ‘python-language-server[all]’

Ruby LSP 服务端的安装方法:

  • sudo gem install solargraph
  • Add gem ‘solargraph’ in Gemfile, then execute command “bundler update” in ruby project

Mac 用户安装 exec-path-from-shell ( https://raw.githubusercontent.com/purcell/exec-path-from-shell/master/exec-path-from-shell.el ) , 避免 LSP 各种抱怨找不到 server 的二进制程序:

(when (featurep 'cocoa)
  (require 'exec-path-from-shell)
  (exec-path-from-shell-initialize))

Company 参考主题:

(custom-set-faces
'(company-preview ((t (:background "gold3" :foreground "black"))))
 '(company-preview-common ((t (:background "gold3" :foreground "grey20"))))
 '(company-preview-search ((t (:background "green4" :foreground "green"))))
 '(company-scrollbar-bg ((t (:background "#303030"))))
 '(company-scrollbar-fg ((t (:background "#404040"))))
 '(company-tooltip ((t (:background "#202020" :foreground "grey"))))
 '(company-tooltip-annotation ((t (:foreground "gold"))))
 '(company-tooltip-annotation-selection ((t (:foreground "white"))))
 '(company-tooltip-common ((t (:inherit company-tooltip :foreground "white"))))
 '(company-tooltip-common-selection ((t (:foreground "white"))))
 '(company-tooltip-selection ((t (:background "red3" :foreground "white"))))
 )
5 个赞

不错 还行 很好

现在用 LSP 进行语法补全, 比 auto-complete 折腾各种后端轻松多了, 不用每个后端还要写一个 auto-complete wrap.

现在电脑快了, company-mode 当初被我吐槽慢的槽点也没啥问题了.

以前也用auto-completion 后来发现company bug很少 就转了

auto complete bug也少,只是现在不想折腾写wrap了

1 个赞

emacs-solargraph seems still use deprecated web protocol?

楼主不觉得lsp卡吗

lsp-mode 参考配置文件:

https://github.com/manateelazycat/lazycat-emacs/blob/master/site-lisp/config/init-lsp.el https://github.com/manateelazycat/lazycat-emacs/blob/master/site-lisp/config/init-company-mode.el

ruby 的 solagraph 从补全和跳转的精度上,仍然比不上 robe 一把梭,基于Pry甚至可以跳转到 任意Gem的源码,哪怕是动态生成的方法也行。

这个包是只支持Emacs的,(当然也可以把里面的robe拿出来给别的编辑器用)。所以就ruby开发(或者Rails开发)来说,Emacs仍然秒杀其他编辑器。

1 个赞

你可以看一下 dumb-jump . :wink:

dumb-jump 只是搜索,robe却是跳转和补全啊,可以跳转到任意Gem或者ruby源码的source里去

大牛问下,这个 lsp,能补全 C/C++ 的 struct 和 class 吗,这个 比 company 和company-clang 如何?

用 ccls 就可以了, 更专业的问 @MaskRay , ccls/lsp 应该是最好的体验了

我有好陣子沒用 robe 了,講真,你不覺得慢麼? 後臺 Ruby 進程常常 100%,降不下來。

之前還和作者一起排查了半天問題,作者加了一堆日志進去,不過還是受不了速度,關掉了。

再请教一个问题,使用 lap-mode + solargraph, 我总是遇到类似下面的问题。

Server ruby-ls:542390 status:starting exited with status exit. Do you want to restart it? (y or n) n

我的问题是,我有自己的方式管理 solargraph 的 server, 我不希望让 lap 自动检测并尝试启东它,只要 connect 它就可以了, 配置文件可以做到吗?

现在似乎默认使用的下面的设置, 但是并不工作, 谢谢。

(lsp-register-client
 (let ((lsp-command '("solargraph" "stdio")))
   (make-lsp-client
    :new-connection (lsp-stdio-connection
                     (if lsp-solargraph-use-bundler
                         (append '("bundle" "exec") lsp-command)
                       lsp-command))
    :major-modes '(ruby-mode enh-ruby-mode)
    :priority -1
    :multi-root t
    :server-id 'ruby-ls
    :initialized-fn (lambda (workspace)
                      (with-lsp-workspace workspace
                        (lsp--set-configuration
                         (lsp-configuration-section "solargraph")))))))