LSP 全称是 Language Server protocol , 是由 Microsoft 主持开发的通用语言分析器协议. 最初是为 Visual Studio Code 开发的, 现在是一个开放的标准 1 . 它是一个 JSON-RPC -based 的协议 2 , 用于编辑器或 IDE 与提供语言分析补全等功能的服务的通信, 编辑器 / IDE 和语言服务甚至可以在不同的机器上 1 . 理查德·斯托曼 也支持该协议 3 .
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
需要安装以下几个包, 如果使用 elpa 管理包, 添加
melpa
源后
M-x package-install <RET>
安装即可
lsp-mode
#Emacs 下 LSP 协议库
company-lsp
#使用 company 提供补全的后端
lsp-ui
#提供诸如 flycheck 等功能
Python 和 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/,如需转载,请注明出处,否则将追究法律责任。