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

今天就跟大家聊聊有关Emacs下如何使用 lsp-mode对Python进行补全,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

创新互联建站专业为企业提供遂川网站建设、遂川做网站、遂川网站设计、遂川网站制作等企业网站建设、网页设计与制作、遂川企业网站模板建站服务,10多年遂川做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

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>安装即可

  • lsp-mode #Emacs 下 LSP 协议库

  • company-lsp #使用 company 提供补全的后端

  • lsp-ui #提供诸如 flycheck 等功能

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)

看完上述内容,你们对Emacs下何使用 lsp-mode对Python进行补全有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。

网页名称:Emacs下如何使用lsp-mode对Python进行补全
分享网址:https://www.cdcxhl.com/article16/isggdg.html

成都网站建设公司_创新互联,为您提供微信小程序域名注册云服务器网页设计公司品牌网站建设全网营销推广

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设