这是我的日常 Neovim 配置,基于 LazyVim 和 lazy.nvim。主要服务 Python 开发,同时兼顾 Go 和 Rust。
- init.lua:加载
config.lazy - lua/config:通用选项、快捷键、自动命令
- lua/plugins:自定义插件配置
- lazyvim.json:LazyVim extras
lua/plugins/noused:历史配置,仅作参考
- Python:
pyright、Ruff 格式化、venv-selector.nvim虚拟环境选择、pytest/neotest、debugpy。 - Go:LazyVim Go extra、
goimports/gofmt、neotest-golang、delve。 - Rust:LazyVim Rust extra、
rustfmt、Cargo 项目优先cargo run、rustaceanvim neotest、codelldb。 - 任务运行:
code_runner.nvim跑当前文件,overseer.nvim跑项目任务,neotest跑测试,DAP 负责调试。 - 查找与文件:
fzf-lua查找;neo-tree做轻量项目树;yazi.nvim做完整文件管理。 - Git:
diffview.nvim查看 diff/文件历史,committia.vim增强提交信息编辑。 - 诊断:关闭 LSP virtual text,通过
diagflow.nvim只在当前行显示诊断。 - 文档注释:
neogen为 Python/Go/Rust 生成 docstring、GoDoc、rustdoc 骨架。
| 快捷键 | 作用 |
|---|---|
<leader>rr |
运行当前文件 |
<leader>rq |
关闭 code runner 窗口 |
<leader>or |
选择并运行项目任务 |
<leader>ot |
打开/关闭任务列表 |
<leader>os |
运行临时 shell task |
<leader>oq |
对任务执行 action |
<leader>tn |
运行最近的测试 |
<leader>tf |
运行当前文件测试 |
<leader>tA |
运行当前项目所有测试 |
<leader>td |
DAP 调试最近的测试 |
<leader>db |
切换断点 |
<leader>dc |
开始或继续调试 |
<leader>du |
切换 DAP UI |
<leader>cv |
选择 Python 虚拟环境 |
<leader>cn |
生成当前函数/类型注释 |
<leader>cN |
生成文件级注释 |
<leader>ct |
删除行尾空白 |
<leader>m |
启动多光标 |
<leader>y |
在当前文件位置打开 Yazi |
<leader>Y |
在当前 cwd 打开 Yazi |
<leader>gH |
查看当前文件 Git 历史 |
<leader>gO |
打开 Diffview |
<leader>gq |
关闭 Diffview |
<leader>gu |
用浏览器打开当前 URL 或文本 |
<leader>gw |
用浏览器搜索当前词或选中文本 |
| 快捷键 | 模式 | 作用 |
|---|---|---|
<C-l> |
Insert | 移到行首 |
<C-a> |
Insert | 移到当前行第一个非空白字符 |
<C-e> |
Insert | 移到行尾 |
<C-S-h> |
Normal | 当前窗口向左缩小 |
<C-S-l> |
Normal | 当前窗口向右扩大 |
<C-S-j> |
Normal | 当前窗口向下扩大 |
<C-S-k> |
Normal | 当前窗口向上缩小 |
gcs |
Normal | 给当前行切换 # fmt: skip |
- 当前文件临时运行:
<leader>rr - 项目级命令:
<leader>or或<leader>os,例如uv run pytest、go test ./...、cargo clippy - 测试:
<leader>tn、<leader>tf、<leader>tA - 调试:
<leader>db加断点,<leader>dc启动/继续,<leader>du打开 UI - Python 环境:
<leader>cv选择 venv - 文档注释:在函数、类型或类上按
<leader>cn - 文件管理:轻量浏览用
neo-tree,批量操作用<leader>y打开 Yazi
插件版本由 lazy-lock.json 固定。启动 Neovim 时不会自动检查插件更新;需要更新时手动运行:
:Lazy check:只检查可更新插件:Lazy update:更新插件并刷新lazy-lock.json:Lazy sync:按配置安装、清理和更新插件
私有项目的 autoformat 开关放在 lua/config/local.lua,该文件被 git 忽略。示例见
lua/config/local.example.lua。
Go 文件会自动使用 tab 缩进;TrimWhitespace 会清理行尾空白并保持视图位置。
git clone <repo-url> ~/.config/nvim
nvim建议提前准备:
- 与当前 LazyVim 版本兼容的 Neovim
git、fzf、rg、yazi- Python、Go、Rust 工具链
ruff、goimports、rustfmt、clippydebugpy、delve、codelldb- Nerd Font
- 观察
faster.nvim的收益;如果启动或输入体验异常,再用:StartupTime对比。 - 继续把真实高频的 LazyVim/LSP/Git 快捷键沉淀到 README。
- 复杂项目按需补
.vscode/launch.json或 Overseer task 模板。