这是一份关于将 Emacs 转变为强大 Python IDE 的指南,主要内容如下:
引言:
- 为什么选择 Emacs:Emacs 不仅是编辑器,还是可扩展的平台,可通过多种工具转变为功能丰富的 Python IDE,能与 PyCharm 或 VS Code 竞争。
- 目标与范围:旨在探索如何将 Emacs 转化为高级 Python IDE,满足个人工程需求,注重实用与配置透明,是个人经验总结,不适合所有人,可激发他人探索 Emacs 的潜力,同时排除了
use-package
。 - 配置栈概述:现代 IDE 需支持编码、调试和环境管理,将 Emacs 转化为 Python IDE 需一系列模块化工具,包括代码智能、 linting 与静态分析、调试、环境管理等。
- 关键协议基础:介绍 Language Server Protocol(LSP)和 Debug Adapter Protocol(DAP),LSP 解决编辑器与语言工具的碎片化问题,DAP 解决调试支持的挑战,两者形成现代 IDE 的 backbone。
环境设置:
- 安装依赖:
lsp-mode
可自动安装 Python Language Server(如pyright
),手动安装可通过在用户主目录安装 Node.js 包,安装后需将"$HOME/.local/bin"
添加到$PATH
。 - 管理多个 Python:
pyenv
可方便地安装和管理多个 Python 版本,direnv
可自动启用或禁用环境变量,根据当前目录选择正确的 Python 环境,两者结合可实现灵活的 Python 版本管理。 - 集成 direnv 到 Emacs:介绍两个 Emacs 扩展
envrc
和emacs-direnv
,其中envrc
可设置缓冲局部环境变量,通过添加特定代码片段可使 Emacs 与direnv
集成,确保项目特定配置不影响其他缓冲区。
- 安装依赖:
IDE 设置:
- 使用 company 和 lsp-mode 实现自动补全:安装
company
后,结合lsp-mode
可实现自动补全,无需额外配置(require 'company)
,company
可与snippet
集成。 - 使用 flymake 和 flycheck 进行诊断:Emacs 有
flycheck
和flymake
两种诊断工具,flycheck
擅长外部 linters,flymake
专注于 LSP 和 native 集成,两者在 Python 项目中表现都很好,可根据需求选择或同时使用。 - 使用 yasnippet 增强自动补全:
yasnippet
可提供代码片段和模板,简化重复结构的编写,与company
集成后可在自动补全中使用 snippets,可全局启用或选择性启用,还可创建自定义 snippet。 - 设置 LSP:安装
lsp-mode
、lsp-pyright
和lsp-ui
,设置 LSP 前缀(如改为C-c l
),选择正确的 Python 版本(可利用direnv
设置VIRTUAL_ENV
),配置 LSP 完成(自定义company-backends
),增强 UI(如启用 breadcrumb 导航和lsp-ui
模块),集成which-key
,配置 LSP 会话和工作区(可禁用 Multi-Root 模式),以及使用 LSP 扩展(如consult-lsp
)。 - 使用 dap-mode 进行调试:安装并启用
dap-mode
,配置dap-python
(选择调试工具如debugpy
),使用dap-mode
进行调试(选择调试模板),创建自定义调试模板,设置和管理断点,提供常用调试命令。
- 使用 company 和 lsp-mode 实现自动补全:安装
- 未来增强:介绍了
Eglot
(轻量级 LSP 替代方案)、lsp-bridge
(注重性能的 LSP 客户端)、Jedi Language Server(Python 特定的轻量级服务器)和uv
(多功能 Python 包和项目管理器)等可选工具。 - 结论:总结了设置的组件(如
pyenv
、direnv
等)及其位置,强调这些工具的优秀组合可将 Emacs 转变为 Python IDE,鼓励继续探索和改进 Python 开发工作流。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。