# Neovim 配置 个人 Neovim 配置,目标版本 **0.12+**。 ## 核心特性 - **内置插件管理器** — `vim.pack`(Neovim 0.12+),无需 lazy.nvim / packer - **自定义懒加载框架** — `lua/lazy.lua`(约 35 行),通过 `on_event` / `on_keys` / `load` 延迟加载重型模块 - **mini.nvim 单体插件集** — starter、pick、extra、files、icons、notify、cmdline、completion、snippets、diff、surround - **LSP + 代码格式化** — nvim-lspconfig + mason + conform.nvim,保存时自动格式化,支持全局/Buffer 级别开关 - **快速启动** — 禁用约 20 个内置插件,启用 Neovim 0.12+ 内置 UI 增强 (`vim._core.ui2`) - **启动仪表盘** — ASCII Logo + 实时模块加载统计 + 启动耗时 - **Colorscheme 优化** — `ex-colors.nvim` 提取并生成精简版 colorscheme(默认 `ex-catppuccin-mocha`) ## 懒加载策略 | 触发条件 | 插件 | |---------------|--------------------------------------| | `VimEnter` | treesitter、lsp、icons | | `InsertEnter` | completion、snippets | | `BufReadPost` | diff、surround | | `BufWritePre` | conform | | 按键触发 | pick、files、fugitive、grugfar | | 命令触发 | ex-colors (`:ExColors`) | ## 键位映射(Leader = 空格) ### 文件查找(mini.pick) | 键位 | 动作 | |----------------|-----------------------------------| | `ff` | 查找文件 | | `fw` | 实时 grep(项目中搜索文本) | | `fa` | 查找所有文件(含隐藏和忽略) | | `fh` | 搜索帮助标签 | | `fo` | 最近打开的文件 | | `fz` | 当前缓冲区行内搜索 | | `sk` | 搜索键位映射 | | `` | Buffer 列表(支持 `` 删除) | | `ft` | 切换文件类型 | ### 文件浏览器(mini.files) | 键位 | 动作 | |------|---------------------------------------| | `-` | 在当前文件所在目录打开文件浏览器 | | `_` | 在项目根目录(git root)打开文件浏览器 | ### Git | 键位 | 动作 | |----------------|--------------------------| | `gg` | Fugitive(全屏新标签页) | | `gd` | Git diff 垂直分割 | | `ghp` | 预览当前 hunk | | `ghb` | Blame 当前行 | | `gB` | Blame 整个文件 | | `gD` | 查看文件 Git 历史 | | `sr` | 搜索并替换(grug-far) | ### LSP 与诊断 | 键位 | 动作 | |--------------|------------------------| | `gd` | 跳转到定义 | | `gh` | 悬停查看文档 | | `ca` | 代码操作 | | `cr` | 重命名符号 | | `fm` | 格式化当前 Buffer | | `df` | 显示行诊断浮动窗口 | | `ds` | 诊断位置列表 | | `]d` / `[d` | 下一个 / 上一个诊断 | | `]e` / `[e` | 下一个 / 上一个错误 | | `]w` / `[w` | 下一个 / 上一个警告 | ### Buffer 管理 | 键位 | 动作 | |--------------|--------------------| | `x` | 关闭当前 Buffer | | `bn` | 新建 Buffer | | `bo` | 关闭其他 Buffer | ### 编辑与搜索 | 键位 | 动作 | |--------------|----------------------------| | `ss` | 全局替换光标下的单词 | | `ud` | 打开内置撤销树 | | `uf` | 切换全局自动格式化 | | `uF` | 切换当前 Buffer 自动格式化 | | `` | 清除搜索高亮 | | `J` | 合并行且不移动光标 | ### 窗口与标签 | 键位 | 动作 | |--------------|--------------------| | `` | 窗口间快速跳转 | | `tc` | 关闭当前标签页 | | `tn` | 新建标签页 | | `]` | 下一个标签页 | | `[` | 上一个标签页 | ### 终端 | 键位 | 动作 | |--------------|----------------------------| | `tt` | 打开新终端 | | `` | 从终端模式返回普通模式 | ### 文件操作 | 键位 | 动作 | |--------------|----------------------------| | `` | 保存文件 | | `` | 复制整个文件内容到剪贴板 | | `yp` | 复制相对文件路径 | | `yP` | 复制绝对文件路径 | ## 命令 ```vim :PackAdd user/repo " 添加插件 :PackDel plugin-name " 删除插件 :PackUpdate [name] " 更新全部或指定插件 :ExColors! " 提取当前 colorscheme 为优化版 ex-colors ``` ## 文件结构 ``` init.lua -- 入口:禁用内置插件,加载核心模块 lua/options.lua -- 全局选项 lua/keymaps.lua -- 键位映射 lua/autocmds.lua -- 自动命令 lua/usercmds.lua -- :PackAdd / :PackDel / :PackUpdate lua/pack.lua -- 插件声明 + 懒加载绑定 lua/lazy.lua -- 自定义懒加载原语(load / on_event / on_keys) lua/plugins/ lsp.lua -- LSP + conform 格式化 treesitter.lua -- 语法树:延迟安装 parser、按 buffer 启用高亮 pick.lua -- mini.pick 封装:buffer picker、filetype picker git.lua -- Git 工具:hunk 预览、blame、文件历史 nvim-pack-lock.json -- 插件锁定文件 colors/ ex-catppuccin-mocha.lua -- 默认配色(ex-colors 生成的优化版) catppuccin-*.lua -- 原始 Catppuccin 配色方案 ``` ## 开发 / 验证 ```bash # 检查 init.lua 语法 nvim --headless -c 'lua dofile("init.lua")' -c 'qa!' # 检查特定模块 nvim --headless -c 'lua require("pack")' -c 'qa!' # 健康检查 nvim --headless -c 'checkhealth' -c 'qa!' # 测量启动时间 nvim --startuptime /tmp/startup.log +q ```