Emacs 下使用 lsp-mode 对 Python 进行补全

LSP 是什么?

LSP 全称是  Language Server protocol , 是由 Microsoft 主持开发的通用语言分析器协议. 最初是为 Visual Studio Code 开发的, 现在是一个开放的标准 1 . 它是一个  JSON-RPC -based 的协议 2 , 用于编辑器或 IDE 与提供语言分析补全等功能的服务的通信, 编辑器 / IDE 和语言服务甚至可以在不同的机器上 1 理查德·斯托曼 也支持该协议 3 .

准备
Python 环境端

Python Language Server  就是 Python 语言服务的实现, 遵从了 LSP 协议. 使用  jedi  提供了诸如补全等功能.

使用  pipenv  管理 Python 环境

cd project_floder
pipenv install python-language-server[all]# pipenv install python-language-server[all] --skip-lock

Emacs 编辑器端

需要安装以下几个包, 如果使用 elpa 管理包, 添加  melpa  源后  M-x package-install <RET> 安装即可

Python 和 Emacs 准备阶段结束.

Emacs 配置

使用以下配置需要安装  use-package


(use-package lsp-mode
    :config
    (add-hook 'python-mode-hook
        (lambda ()
            (lsp-python-enable)))
    ;; 调用 pyls 既上边安装的 Python Language Server
    ;; 不需要安装 lsp-python, 以下几行提供与 lsp-python 相同的功能
    (lsp-define-stdio-client lsp-python "python"
            (lsp-make-traverser #'(lambda (dir)
                        (directory-files
                        dir
                        nil                        "\\(__init__\\|setup\\)\\.py\\|Pipfile")))            '("pyls")))
(use-package lsp-imenu
    :init
    ;; 启用 lsp-imenu 集成
    (add-hook 'lsp-after-open-hook 'lsp-enable-imenu))
(use-package lsp-ui
    :init
    ;; 启用 lsp-ui
    (add-hook 'lsp-mode-hook 'lsp-ui-mode)
    ;; 启用 flycheck
    (add-hook 'python-mode-hook 'flycheck-mode))
(use-package company-lsp
    :config
    ;; 设置 company-lsp 为后端
    (push 'company-lsp company-backends))
其它

Python Language Server  可以不必在每个环境中都安装, 以  pipenv  为例, 安装  Python Language Server  到全局  Python  中, 然后在每个环境下  pipenv shell  进入环境即可补全该环境下的包.


(lsp-define-stdio-client lsp-python "python"
            (lsp-make-traverser #'(lambda (dir)
                        (directory-files
                        dir                        nil
                        "\\(__init__\\|setup\\)\\.py\\|Pipfile")))            '("pyls"))

这段配置说明了需要在目录下能找到  __init__.py  等文件后将其作为  project root  使用, 如果没找到相应文件, 则会抛出找不到项目根目录的  Warning , 并且是以  *Warnings* buffer  的形式显示的, 在  lsp-mode  的  :config  后加入下面一句, 就可以用 Message 而不是 buffer 的形式显示 Warning.

(setq lsp-message-project-root-warning t)

看个人简介

图文来源于网络:侵删


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69912078/viewspace-2638197/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/69912078/viewspace-2638197/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值