Neovim 配置详解
基于 lazy.nvim 的模块化配置,适用于 Neovim >= 0.11(当前环境 0.12.x)。
配置根目录:~/.config/nvim
目录结构
~/.config/nvim/
├── init.lua # 入口:加载 options → keymaps → lazy
├── lazy-lock.json # 插件版本锁
├── README.md # 安装说明
├── NVIM_CONFIG.md # 本文档
└── lua/
├── config/
│ ├── options.lua # 编辑器基础选项
│ ├── keymaps.lua # 全局键位 + LSP/cmp/gitsigns 共享函数
│ └── lazy.lua # lazy.nvim 初始化与全局配置
└── plugins/ # 每个插件一个文件,由 lazy 自动导入
启动流程:init.lua 先加载编辑器选项,再注册全局键位,最后交给 lazy.nvim
按需懒加载所有插件。
编辑器基础设置(options.lua)
| 设置 |
值 |
说明 |
| 行号 |
number + relativenumber |
当前行绝对行号,其余相对行号 |
| 缩进 |
tabstop/shiftwidth = 2,expandtab |
2 空格缩进 |
| 搜索 |
smartcase + hlsearch + incsearch |
智能大小写、实时预览、高亮 |
| 界面 |
cursorline、signcolumn、scrolloff=8 |
当前行高亮、符号列、滚动留白 |
| 窗口 |
splitright / splitbelow |
新窗口右/下打开 |
| 文件 |
undofile、无 swap/backup |
持久化撤销 |
| 剪贴板 |
clipboard=unnamedplus |
与系统剪贴板互通 |
| 性能 |
updatetime=250、timeoutlen=300 |
快速响应 CursorHold 与快捷键 |
| 补全 |
pumheight=10、completeopt=menuone,noselect |
补全菜单行为 |
插件清单
核心 / 管理
| 插件 |
作用 |
加载方式 |
| folke/lazy.nvim |
插件管理器,自动导入 lua/plugins/ |
启动 |
主题与界面
| 插件 |
作用 |
加载方式 |
| catppuccin/nvim |
默认主题(mocha,透明背景),集成 cmp/snacks/notify/mini 等 |
priority 1000 |
| LmanTW/themify.nvim |
主题管理器,内置 16 套主题可随时切换 |
启动 |
| nvim-lualine/lualine.nvim |
状态栏(模式、分支、诊断、文件名) |
VimEnter |
| akinsho/bufferline.nvim |
顶部 buffer 标签页,支持智能关闭、拖拽 |
BufReadPost |
| rcarriga/nvim-notify |
通知美化 |
启动 |
| folke/noice.nvim |
命令行弹窗、补全菜单美化 |
VeryLazy |
| stevearc/dressing.nvim |
统一 vim.ui 输入/选择弹窗 |
启动 |
| nvim-tree/nvim-web-devicons |
文件类型图标 |
依赖 |
| MunifTanjim/nui.nvim |
UI 组件库 |
依赖 |
| folke/snacks.nvim |
全家桶:启动页、搜索器、文件管理器、lazygit、状态列、图片预览、大文件优化等 |
启动 |
编辑增强
| 插件 |
作用 |
加载方式 |
| nvim-treesitter/nvim-treesitter |
语法高亮与解析器管理 |
启动 |
| nvim-treesitter/nvim-treesitter-textobjects |
基于语法树的选择/移动文本对象 |
VeryLazy |
| nvim-treesitter/nvim-treesitter-context |
滚动时固定显示当前函数/类上下文 |
VeryLazy |
| kevinhwang91/nvim-ufo |
高性能代码折叠(zR/zM) |
BufReadPost |
| HiPhish/rainbow-delimiters.nvim |
彩虹括号 |
BufReadPre |
| lukas-reineke/indent-blankline.nvim |
缩进参考线(scope 交给 mini.indentscope) |
BufReadPost |
| windwp/nvim-ts-autotag |
HTML/JSX 标签自动闭合与重命名 |
InsertEnter |
| numToStr/Comment.nvim |
gcc/gc 注释 |
BufReadPre |
| RRethy/vim-illuminate |
高亮光标所在词的其他出现位置 |
BufReadPre |
| kylechui/nvim-surround |
ys/cs/ds 环绕操作 |
BufReadPre |
| akinsho/toggleterm.nvim |
浮动终端(<C-\>) |
按键 |
| folke/flash.nvim |
快速跳转(s) |
VeryLazy |
| echasnovski/mini.nvim |
平滑动画、智能删 buffer、缩进范围高亮 |
VeryLazy |
| stevearc/oil.nvim |
像编辑 buffer 一样操作文件系统(-) |
按键 |
| mikavilpas/yazi.nvim |
Yazi 文件管理器(:Yazi) |
VeryLazy |
| ThePrimeagen/harpoon |
快速标记/切换文件 |
VeryLazy |
| folke/persistence.nvim |
会话保存与恢复 |
BufReadPre |
| uga-rosa/ccc.nvim |
颜色选择器(:CccPick) |
启动 |
| OXY2DEV/markview.nvim |
Markdown 可视化渲染 |
ft=markdown |
| iamcco/markdown-preview.nvim |
浏览器预览 Markdown(:MarkdownPreviewToggle) |
命令 |
| folke/todo-comments.nvim |
高亮 TODO/FIXME 并聚合到 Trouble |
VeryLazy |
| mbbill/undotree |
可视化撤销树(<leader>uu) |
按键 |
| MagicDuck/grug-far.nvim |
项目级查找替换(<leader>fR) |
按键 |
| stevearc/overseer.nvim |
任务运行器(<leader>o*) |
命令 |
搜索与导航
| 插件 |
作用 |
加载方式 |
| folke/which-key.nvim |
快捷键提示向导 |
VeryLazy |
| folke/snacks.nvim (picker) |
文件/内容/符号/诊断等所有模糊搜索 |
启动 |
| stevearc/aerial.nvim |
符号大纲(<leader>cs) |
按键 |
| folke/trouble.nvim |
诊断/符号/引用列表 |
命令 |
| dnlhc/glance.nvim |
定义/引用/类型定义预览 |
命令 |
LSP 与补全
| 插件 |
作用 |
加载方式 |
| williamboman/mason.nvim |
LSP/工具安装器 |
命令 |
| williamboman/mason-lspconfig.nvim |
Mason 与 lspconfig 桥接,自动启用已装 server |
BufReadPre |
| neovim/nvim-lspconfig |
LSP 客户端配置 |
依赖 |
| hrsh7th/nvim-cmp + 各 source |
补全(LSP/路径/buffer/命令) |
启动 |
| L3MON4D3/LuaSnip + friendly-snippets |
代码片段引擎与片段库 |
启动 |
| stevearc/conform.nvim |
保存时按文件类型格式化 |
BufWritePre |
| 内置 inlay hints |
LSP 行内类型提示(自动开启 + <leader>uh) |
LspAttach |
已配置的 LSP server:lua_ls、pyright、clangd、ts_ls、bashls、
html、cssls、jsonls、yamlls(rust-analyzer 由 rustaceanvim 管理)。
Git
| 插件 |
作用 |
加载方式 |
| lewis6991/gitsigns.nvim |
行内增删改标记、hunk 跳转 |
BufReadPre |
| sindrets/diffview.nvim |
Git 差异/文件历史查看 |
命令 |
| snacks (lazygit/gitbrowse) |
终端 lazygit、GitHub 链接跳转 |
按键 |
测试 / 调试 / 构建
| 插件 |
作用 |
加载方式 |
| nvim-neotest/neotest + python/rust/plenary 适配器 |
测试运行/调试/总览 |
VeryLazy |
| mfussenegger/nvim-dap |
调试协议(codelldb) |
命令 |
| rcarriga/nvim-dap-ui |
调试界面 |
依赖 |
| theHamsta/nvim-dap-virtual-text |
调试时变量虚拟文本 |
依赖 |
| Weissle/persistent-breakpoints.nvim |
断点持久化 |
依赖 |
| jay-babu/mason-nvim-dap.nvim |
自动安装 codelldb |
依赖 |
| mrcjkb/rustaceanvim |
Rust 专用 LSP/调试配置 |
ft=rust |
| saecki/crates.nvim |
Cargo.toml 依赖版本管理 |
ft=rust/toml |
| akinsho/flutter-tools.nvim |
Flutter 开发支持 |
ft=dart |
快捷键
<leader> 是空格。所有自定义快捷键都以空格开始,不使用 F1-F12 或 Alt 组合键,因此不会与 Niri 的全局按键冲突。输入空格后可由 which-key 查看当前可用按键。
日常操作
| 按键 |
作用 |
<leader>w / <leader>q / <leader>Q |
保存 / 退出 / 全部退出 |
jj(插入模式) |
退出插入模式 |
<Esc> |
清除搜索高亮 |
- |
Oil 文件浏览器 |
<C-\\> |
打开或关闭浮动终端 |
< / >(可视模式) |
缩进并保持选中 |
p(可视模式) |
粘贴且不覆盖寄存器 |
窗口与 Buffer
| 按键 |
作用 |
<C-w>h/j/k/l |
跳转左 / 下 / 上 / 右窗口(Neovim 原生) |
<leader>sv / <leader>sh |
垂直 / 水平分割 |
<leader>sx / <leader>so |
关闭窗口 / 只保留当前窗口 |
<leader>se / <leader>sm |
均衡 / 最大化窗口 |
<leader>bb / <leader>bd / <leader>bo |
Buffer 列表 / 关闭当前 / 关闭其他 |
[b / ]b |
上一个 / 下一个 Buffer |
查找与文件
| 按键 |
作用 |
<leader>e |
文件浏览器 |
<leader>ff / <leader>fr |
查找文件 / 最近文件 |
<leader>fg / <leader>fw |
全局搜索 / 搜索光标词或选区 |
<leader>fs / <leader>fh / <leader>fk |
文件符号 / 帮助 / 快捷键 |
<leader>fR |
项目级查找替换 |
代码与诊断
这些 LSP 键只在语言服务已附加的文件中生效。
| 按键 |
作用 |
K |
悬浮文档 |
gd / gD |
定义 / 声明 |
gr / gi / gy |
引用 / 实现 / 类型定义 |
[d / ]d |
上一条 / 下一条诊断 |
<leader>ca / <leader>cr / <leader>cf |
代码动作 / 重命名 / 格式化 |
<leader>cs |
符号大纲 |
<leader>xd / <leader>xx / <leader>xX |
当前诊断 / 工作区诊断 / 当前文件诊断 |
Git 与调试
| 按键 |
作用 |
<leader>gg / <leader>gb |
LazyGit / 浏览 Git 链接 |
<leader>gd / <leader>gh |
Diff 视图 / 文件历史 |
[h / ]h |
上一处 / 下一处 Git 修改 |
<leader>dc / <leader>db |
调试继续 / 切换断点 |
<leader>do / <leader>di / <leader>dO |
单步跳过 / 进入 / 退出 |
<leader>dB / <leader>dr / <leader>du |
条件断点 / REPL / 调试 UI |
<leader>mb / <leader>mr / <leader>md |
C++ 构建 / 构建并运行 / 构建并调试 |
按需功能
| 按键 |
作用 |
<leader>tr / <leader>tf / <leader>td |
测试最近项 / 当前文件 / 调试最近项 |
<leader>ts / <leader>to |
测试总览 / 输出 |
<leader>rr / <leader>rt / <leader>rd |
Rust 运行 / 测试 / 调试(仅 Rust 文件) |
<leader>re / <leader>rc |
Rust 解释错误 / 打开 Cargo.toml(仅 Rust 文件) |
<leader>ha / <leader>hh |
Harpoon 标记文件 / 打开列表 |
<leader>or / <leader>ol / <leader>oo |
运行任务 / 任务列表 / 快速操作 |
<leader>us / <leader>uw / <leader>uh / <leader>uu |
拼写 / 自动换行 / 行内提示 / 撤销树 |
<leader>l / <leader>M / <leader>n |
Lazy / Mason / 通知历史 |
补全与折叠
| 按键 |
作用 |
<C-j> / <C-k>(插入模式) |
下一个 / 上一个补全项 |
<C-b> / <C-f>(插入模式) |
补全文档滚动 |
<C-/> / <CR>(插入模式) |
手动补全 / 确认 |
zR / zM / zc / zo / za |
展开全部 / 关闭全部 / 关闭 / 展开 / 切换折叠 |
常用维护命令
| 命令 |
作用 |
:Lazy sync |
安装 / 更新 / 清理插件 |
:Lazy clean |
删除配置中不再引用的插件 |
:Lazy update |
更新全部插件 |
:Mason |
LSP / DAP 工具管理 |
:TSUpdate |
更新 tree-sitter 解析器 |
:ConformInfo |
查看格式化工具状态 |
说明
- AI 补全插件已从配置中移除,如需 AI 补全可单独引入。
- inlay hints 使用 Neovim 内置实现(0.10+),无需第三方插件。
- 诊断/导航类功能由 Trouble、Glance、aerial 与 LSP 内置完成(Lspsaga 已移除)。