这是一个基于 lazy.nvim 的模块化 Neovim 配置,目标是提供轻量、清晰、接近 IDE 的 Go / Python / Lua / Shell / Markdown 开发体验。
本节由原
AGENTS.md迁移并补充,作为人类读者和编码代理都可参考的配置总览。
- 入口文件:
init.lua - 插件管理器:
folke/lazy.nvim - Leader 键:
<Space> - 主题:
catppuccin/nvim,默认catppuccin-mocha - LSP:
gopls、pyright、lua_ls、clangd - 主要功能:文件浏览器、Telescope 搜索、LSP、补全、格式化、Lint、Git hunk、诊断面板、任务运行、Session 恢复、浮动终端、Markdown 渲染、快捷键提示
- mini.files:浮动文件浏览器
- mini.jump:扩展
f/F/t/T在多行工作 - mini.jump2d:可见行内的迭代标签跳转
- floaterm:浮动终端;进入浮动终端后预留
Ctrl+l/a/e/k给 shell 使用 - nvim-lspconfig:LSP 配置
- formatter.nvim:格式化
- Comment.nvim:注释
- render-markdown.nvim:Markdown 渲染
- markdown-preview.nvim:Markdown 浏览器预览(含 Mermaid 支持)
- LspUI.nvim:LSP UI 增强
- barbar.nvim:Buffer 标签栏
- telescope.nvim:搜索 / Picker
- gitsigns.nvim:Git hunk / blame
- nvim-lint:异步 lint
- trouble.nvim:诊断 / quickfix / LSP 列表
- nvim-autopairs:自动括号
- overseer.nvim:任务运行器
- nvim-surround:Surround 操作
- indent-blankline.nvim:缩进线
- dropbar.nvim:winbar 面包屑(LSP / Treesitter / Path 自动 fallback)
- auto-session:Session 管理
- pi.nvim:Neovim 内通过 pi CLI 与 AI 交互
- Neovim
>= 0.12,当前配置使用了新版vim.lsp.config()/vim.lsp.enable()API - Git
>= 2.19 - 推荐安装 Nerd Font,保证图标显示正常
- 推荐命令行工具:
rg:Telescope 全文搜索fd:Telescope 文件查找体验更好tree-sitter:Treesitter parser 安装与更新
init.lua
lua/
core/
options.lua # 基础选项、诊断显示配置
keymaps.lua # 全局快捷键
autocmds.lua # 自动命令、LSP 快捷键、自动保存
plugins/
completion.lua # nvim-cmp / LuaSnip 补全
diagnostics.lua # nvim-lint / trouble.nvim
editing.lua # autopairs / surround / indent guides
editor.lua # 文件浏览器、注释、终端、buffer、treesitter、markdown、跳转
formatter.lua # formatter.nvim / mason-tool-installer
git.lua # gitsigns.nvim
go.lua # go.nvim (Go 开发)
lsp.lua # mason / lspconfig / LspUI
session.lua # auto-session
tasks.lua # overseer.nvim
telescope.lua # Telescope 搜索
ui.lua # 主题、通知、Noice UI、which-key
pi.lua # pi.nvim AI 交互
lazy-lock.json # lazy.nvim 插件锁定文件
- 插件管理:
folke/lazy.nvim - 主题:
catppuccin/nvim,默认catppuccin-mocha - UI:
noice.nvim、nvim-notify、barbar.nvim、which-key.nvim
- LSP:
nvim-lspconfig、mason.nvim、mason-lspconfig.nvim - LSP UI:
jinzhongjia/LspUI.nvim - Go 开发:
ray-x/go.nvim(gopls 管理、测试、格式化、代码生成、Tag 管理等) - 补全:
nvim-cmp、cmp-nvim-lsp、cmp-buffer、cmp-path - Snippet:
LuaSnip、friendly-snippets - 格式化:
formatter.nvim - 工具安装:
mason-tool-installer.nvim
默认 LSP:
gopls(由 go.nvim 管理)pyrightlua_lsclangd(C / C++ / Objective-C / CUDA)
默认格式化工具:
- Lua:
stylua - Python:
black - Go:
gofumpt(通过 formatter.nvim,手动触发) - Shell:
shfmt - C / C++ / Objective-C / CUDA:
clang-format(通过 formatter.nvim;本配置根目录附带 LLVM 风格.clang-format,各项目可自带规则覆盖) - JS / TS / JSON / CSS / HTML / Markdown / YAML:
prettier
已配置:
- Go:
ray-x/go.nvim(gopls、测试、覆盖率、代码生成、Tag、文档、DAP 调试) - Git:
lewis6991/gitsigns.nvim - Lint:
mfussenegger/nvim-lint - 诊断面板:
folke/trouble.nvim - 自动括号:
windwp/nvim-autopairs - 任务运行器:
stevearc/overseer.nvim - Surround 操作:
kylechui/nvim-surround - 缩进线:
lukas-reineke/indent-blankline.nvim - Session 管理:
rmagatti/auto-session - 快捷键提示:
folke/which-key.nvim - 跳转:
nvim-mini/mini.jump(多行f/F/t/T)、nvim-mini/mini.jump2d(可见区迭代跳转)
mason-tool-installer 同时补充安装常用 lint 工具:
ruffgolangci-lintshellcheckeslint_dmarkdownlint-cli2yamllintactionlint
Leader 键:<Space>
| 快捷键 | 功能 |
|---|---|
jj |
Insert / Terminal 模式退出到 Normal |
q |
关闭当前窗口 |
<Esc> |
清除搜索高亮 |
<leader>fm |
格式化当前文件 |
<leader>? |
显示当前 Buffer 快捷键 |
| 快捷键 | 功能 |
|---|---|
<leader>ai |
Pi: 提问 (当前 Buffer) |
<leader>ai |
Pi: 提问 (选区,Visual) |
<leader>ac |
Pi: 取消当前请求 |
<leader>al |
Pi: 查看会话日志 |
| 快捷键 | 功能 |
|---|---|
sv |
垂直分屏 |
sh |
水平分屏 |
<C-h/j/k/l> |
窗口间移动 |
<leader>= |
平衡窗口大小 |
<A-h> |
上一个 Buffer |
<A-l> |
下一个 Buffer |
<leader>bd |
关闭当前 Buffer |
<leader>tn |
新建标签页 |
<leader>tc |
关闭标签页 |
| 快捷键 | 功能 |
|---|---|
<leader>fe |
打开/关闭文件浏览器 |
<leader>ff |
Telescope 查找文件 |
<leader>fg |
Telescope 全文搜索 |
<leader>fs |
搜索光标下单词 |
<leader>fb |
查找 Buffer |
<leader>fh |
查找帮助 |
<CR> |
mini.jump2d 跨行跳转(覆盖 normal 默认跳到行首) |
| 快捷键 | 功能 |
|---|---|
<leader>t |
底部打开内置终端 |
<C-/> / <C-_> |
切换浮动终端 |
| 快捷键 | 功能 |
|---|---|
K |
悬浮文档 |
gd |
Telescope 选择并跳转定义 |
gi |
Telescope 选择并跳转实现 |
gI |
Go 文件:跳转接口实现;其他文件:跳转类型定义 |
gr |
Telescope 查找并跳转引用 |
<leader>cr |
符号重命名 |
<leader>ca |
Code Action |
[d / ]d |
上一个 / 下一个诊断 |
<leader>e |
打开当前行诊断浮窗 |
<leader>q |
诊断写入 location list |
<leader>cl |
手动 lint 当前文件 |
<leader>; |
dropbar:Pick 模式选择面包屑符号 |
[; |
dropbar:跳到当前 context 起点 |
]; |
dropbar:选下一个 context |
LSP 位置类跳转使用 Telescope picker,选择条目并按 <CR> 即可跳转;如果 Telescope 不可用,会自动回退到 Neovim 内置 LSP 跳转。 |
| 快捷键 | 功能 |
|---|---|
<leader>xx |
打开/关闭工作区诊断 |
<leader>xX |
打开/关闭当前文件诊断 |
<leader>xs |
文档符号 |
<leader>xl |
LSP 定义 / 引用 / 实现 |
<leader>xq |
Quickfix 列表 |
<leader>xL |
Location 列表 |
| 快捷键 | 功能 |
|---|---|
]g / [g |
下一个 / 上一个 Git hunk |
<leader>gs |
暂存 hunk |
<leader>gr |
重置 hunk |
<leader>gS |
暂存当前文件 |
<leader>gR |
重置当前文件 |
<leader>gu |
撤销暂存 hunk |
<leader>gp |
预览 hunk |
<leader>gb |
查看当前行 blame |
<leader>gB |
切换行尾 blame |
<leader>gd |
当前文件 diff |
<leader>gD |
与上一版本 diff |
ih |
Git hunk 文本对象 |
前缀键:<leader>G
| 快捷键 | 功能 |
|---|---|
<leader>Gr |
运行当前文件 |
<leader>Gb |
构建 |
<leader>Gt |
运行测试 |
<leader>GT |
测试当前文件 |
<leader>GF |
测试当前函数 |
<leader>Gc |
测试覆盖率 |
<leader>Gie |
自动填充 if err |
<leader>Gif |
填充结构体 |
<leader>Gis |
填充 switch |
<leader>Gii |
实现接口 |
<leader>Git |
生成单元测试 |
<leader>Gta |
添加 struct tag |
<leader>Gtr |
移除 struct tag |
<leader>Gdd |
查看文档 |
<leader>Gdb |
浏览器打开文档 |
<leader>Ga |
切换测试/实现文件 |
<leader>Gav |
垂直分屏切换 |
<leader>Gas |
水平分屏切换 |
<leader>Gmt |
mod tidy |
<leader>Gmv |
mod vendor |
<leader>Gg |
go get |
<leader>Gl |
golangci-lint |
<leader>Gv |
漏洞检查 (govulncheck) |
<leader>Gcm |
生成注释 |
<leader>Gen |
生成 enum |
<leader>Gjr |
JSON 转 Struct |
常用命令:
:GoRun " 运行当前文件
:GoTest " 运行测试
:GoTestFunc " 测试当前函数
:GoCoverage " 测试覆盖率
:GoAlt " 切换测试/实现文件
:GoDoc " 查看文档
:GoImpl " 实现接口
:GoIfErr " 自动填充 if err
:GoModTidy " mod tidy
:GoLint " golangci-lintGo 文件使用 <leader>fm 或 :Format 手动触发 gofumpt 格式化(已禁用保存时自动格式化)。
| 快捷键 | 功能 |
|---|---|
<leader>or |
选择并运行任务 |
<leader>oc |
运行 Shell 命令任务 |
<leader>ot |
切换任务列表 |
<leader>oa |
当前任务操作 |
常用命令:
:OverseerRun
:OverseerShell
:OverseerToggle
:OverseerTaskAction自定义任务模板:
- Go:
Go: Run Current File/Go: Build Project(自动查找 go.mod) - Flutter (fvm):
Flutter: Run/Flutter: Build(支持选择构建目标) - Docker:
Docker: Compose Up/Docker: Compose Down(自动查找 compose 文件)
### Session / Auto Session
| 快捷键 | 功能 |
| ------------ | --------------------- |
| `<leader>sr` | 恢复当前目录 Session |
| `<leader>ss` | 保存当前目录 Session |
| `<leader>sf` | 查找 Session |
| `<leader>sd` | 删除当前目录 Session |
| `<leader>sD` | 选择并删除 Session |
| `<leader>st` | 切换 Session 自动保存 |
| `<leader>sp` | 清理孤立 Session |
Session 会自动保存 / 恢复当前工作目录状态,并排除 `~/`、`~/Downloads`、`/` 等目录,避免在过大的根目录生成无意义 Session。
### Markdown 预览
| 快捷键 | 功能 |
| ------------- | ---------------------- |
| `<leader>mps` | Markdown: 开始预览 |
| `<leader>mpS` | Markdown: 停止预览 |
| `<leader>mpr` | Markdown: 刷新预览 |
常用命令:
```vim
:MarkdownPreview " 开始浏览器预览
:MarkdownPreviewStop " 停止预览
:MarkdownPreviewRefresh " 强制刷新
Mermaid 图表在浏览器中渲染为可交互 SVG,支持缩放、平移和导出。
which-key.nvim:按下<leader>等前缀键后显示可用快捷键;<leader>?可查看当前 Buffer 的快捷键nvim-autopairs:Insert 模式自动补全括号、引号等,并集成nvim-cmp确认补全后的括号处理nvim-surround:使用默认快捷键,例如:ys{motion}{char}添加 surroundds{char}删除 surroundcs{old}{new}修改 surround
indent-blankline.nvim:显示缩进参考线和当前作用域
nvim-lint 会在以下事件触发:
BufWritePostBufReadPostInsertLeave
已配置 filetype:
| Filetype | Linter |
|---|---|
| Python | ruff |
| Go | golangci-lint |
| Shell / Bash / Zsh | shellcheck |
| JavaScript / TypeScript / React | eslint_d |
| Markdown | markdownlint-cli2 |
| YAML | yamllint |
| GitHub Actions YAML | actionlint + yamllint |
配置会在运行 lint 前检查 linter 可执行文件是否存在,避免缺少工具时反复报错。
:Lazy " 插件管理 UI
:Lazy sync " 同步/安装/清理插件
:Mason " 管理 LSP、formatter、linter 等工具
:LspInfo " 查看 LSP 状态
:checkhealth " 检查 Neovim 健康状态
:Format " 格式化当前文件
:Trouble diagnostics toggle
:OverseerRun
:AutoSession search
:WhichKey- 当前配置开启了自动保存:编辑后延迟写入文件,并在离开 buffer / 失焦 / 退出前保存。
lazy-lock.json会锁定插件版本,便于复现环境。- 如果新增语言支持,通常需要同时补充:LSP、formatter、linter、treesitter parser。