1、概述
配置文件链接:starter.lvim: Python
该配置为 Python 开发打造一个绝佳的起点,包含以下内容:
1、语言服务器协议 LSP
2、格式化
3、代码检查
4、快捷键映射
2、配置文件config.lua
-- install plugins
lvim.plugins = {
"ChristianChiarulli/swenv.nvim",
"stevearc/dressing.nvim",
"mfussenegger/nvim-dap-python",
"nvim-neotest/neotest",
"nvim-neotest/neotest-python",
}
-- automatically install python syntax highlighting
lvim.builtin.treesitter.ensure_installed = {
"python",
}
-- setup formatting
local formatters = require "lvim.lsp.null-ls.formatters"
formatters.setup { { name = "black" }, }
lvim.format_on_save.enabled = true
lvim.format_on_save.pattern = { "*.py" }
-- setup linting
local linters = require "lvim.lsp.null-ls.linters"
linters.setup { { command = "flake8", filetypes = { "python" } } }
-- setup debug adapter
lvim.builtin.dap.active = true
local mason_path = vim.fn.glob(vim.fn.stdpath "data" .. "/mason/")
pcall(function()
require("dap-python").setup(mason_path .. "packages/debugpy/venv/bin/python")
end)
-- setup testing
require("neotest").setup({
adapters = {
require("neotest-python")({
-- Extra arguments for nvim-dap configuration
-- See https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings for values
dap = {
justMyCode = false,
console = "integratedTerminal",
},
args = { "--log-level", "DEBUG", "--quiet" },
runner = "pytest",
})
}
})
lvim.builtin.which_key.mappings["dm"] = { "<cmd>lua require('neotest').run.run()<cr>",
"Test Method" }
lvim.builtin.which_key.mappings["dM"] = { "<cmd>lua require('neotest').run.run({strategy = 'dap'})<cr>",
"Test Method DAP" }
lvim.builtin.which_key.mappings["df"] = {
"<cmd>lua require('neotest').run.run({vim.fn.expand('%')})<cr>", "Test Class" }
lvim.builtin.which_key.mappings["dF"] = {
"<cmd>lua require('neotest').run.run({vim.fn.expand('%'), strategy = 'dap'})<cr>", "Test Class DAP" }
lvim.builtin.which_key.mappings["dS"] = { "<cmd>lua require('neotest').summary.toggle()<cr>", "Test Summary" }
-- binding for switching
lvim.builtin.which_key.mappings["C"] = {
name = "Python",
c = { "<cmd>lua require('swenv.api').pick_venv()<cr>", "Choose Env" },
}
3、配置说明
这段代码是一个用于配置 LunarVim(一个基于 Neovim 的现代化 IDE 风格编辑器)的 Lua 脚本,主要用于增强 Python 开发体验。以下是对代码的详细说明:
3.1 安装插件
lvim.plugins = {
"ChristianChiarulli/swenv.nvim",
"stevearc/dressing.nvim",
"mfussenegger/nvim-dap-python",
"nvim-neotest/neotest",
"nvim-neotest/neotest-python",
}
- 这部分定义了需要安装的插件列表:
swenv.nvim
:用于管理 Python 虚拟环境。dressing.nvim
:改进 Neovim 的 UI 组件(如菜单、输入框等)。nvim-dap-python
:为 Python 提供调试支持(基于 Debug Adapter Protocol)。neotest
和neotest-python
:用于运行和调试 Python 测试。
3.2 自动安装 Python 语法高亮
lvim.builtin.treesitter.ensure_installed = {
"python",
}
- 使用 Tree-sitter 确保 Python 语言的语法高亮功能已安装。
3.3 设置格式化工具
local formatters = require "lvim.lsp.null-ls.formatters"
formatters.setup { { name = "black" }, }
lvim.format_on_save.enabled = true
lvim.format_on_save.pattern = { "*.py" }
- 使用 null-ls 插件集成格式化工具:
- 设置
black
作为 Python 的代码格式化工具。 - 启用保存文件时自动格式化功能,并限定只对
.py
文件生效。
- 设置
3.4 设置代码检查工具
local linters = require "lvim.lsp.null-ls.linters"
linters.setup { { command = "flake8", filetypes = { "python" } } }
- 使用 null-ls 插件集成代码检查工具:
- 设置
flake8
作为 Python 的代码检查工具。 - 限定只对 Python 文件生效。
- 设置
3.5 配置调试适配器
lvim.builtin.dap.active = true
local mason_path = vim.fn.glob(vim.fn.stdpath "data" .. "/mason/")
pcall(function()
require("dap-python").setup(mason_path .. "packages/debugpy/venv/bin/python")
end)
- 启用 LunarVim 内置的调试功能(DAP)。
- 使用
debugpy
作为 Python 的调试器:mason_path
是通过 Mason 插件管理工具安装的调试器路径。dap-python
插件会使用指定的 Python 解释器来启动调试。
3.6 配置测试框架
require("neotest").setup({
adapters = {
require("neotest-python")({
dap = {
justMyCode = false,
console = "integratedTerminal",
},
args = { "--log-level", "DEBUG", "--quiet" },
runner = "pytest",
})
}
})
- 配置 neotest 插件以支持 Python 测试:
- 使用
pytest
作为测试运行器。 - 配置调试选项(如
justMyCode
和console
)。 - 添加额外的命令行参数(如日志级别和静默模式)。
- 使用
3.7 绑定快捷键
1) 测试相关快捷键
lvim.builtin.which_key.mappings["dm"] = { "<cmd>lua require('neotest').run.run()<cr>", "Test Method" }
lvim.builtin.which_key.mappings["dM"] = { "<cmd>lua require('neotest').run.run({strategy = 'dap'})<cr>", "Test Method DAP" }
lvim.builtin.which_key.mappings["df"] = {
"<cmd>lua require('neotest').run.run({vim.fn.expand('%')})<cr>", "Test Class" }
lvim.builtin.which_key.mappings["dF"] = {
"<cmd>lua require('neotest').run.run({vim.fn.expand('%'), strategy = 'dap'})<cr>", "Test Class DAP" }
lvim.builtin.which_key.mappings["dS"] = { "<cmd>lua require('neotest').summary.toggle()<cr>", "Test Summary" }
- 定义了一系列快捷键用于运行和调试测试:
dm
:运行当前方法的测试。dM
:使用调试模式运行当前方法的测试。df
:运行当前文件的所有测试。dF
:使用调试模式运行当前文件的所有测试。dS
:切换测试结果摘要窗口。
2) Python 环境切换快捷键
lvim.builtin.which_key.mappings["C"] = {
name = "Python",
c = { "<cmd>lua require('swenv.api').pick_venv()<cr>", "Choose Env" },
}
- 定义了一个快捷键用于切换 Python 虚拟环境:
C-c
:打开虚拟环境选择菜单。
3.8 总结
这段配置脚本的主要目的是为 LunarVim 提供一套完整的 Python 开发工具链,包括:
- 虚拟环境管理(
swenv.nvim
)。 - 代码格式化(
black
)和 代码检查(flake8
)。 - 调试支持(
debugpy
和dap-python
)。 - 测试支持(
neotest
和pytest
)。 - 快捷键绑定,方便开发者快速执行常见操作。
通过这些配置,开发者可以在 LunarVim 中高效地进行 Python 开发,享受现代化 IDE 的便利。