docs(readme): 补充 ex-colors、键位映射等文档; fix(pack): mini.starter/notify 添加 pcall 保护

This commit is contained in:
xfy 2026-05-29 10:57:19 +08:00
parent 3f0d338fb8
commit 4bd841fab1
2 changed files with 56 additions and 42 deletions

View File

@ -7,9 +7,10 @@
- **内置插件管理器**`vim.pack`Neovim 0.12+),无需 lazy.nvim / packer - **内置插件管理器**`vim.pack`Neovim 0.12+),无需 lazy.nvim / packer
- **自定义懒加载框架**`lua/lazy.lua`(约 35 行),通过 `on_event` / `on_keys` / `load` 延迟加载重型模块 - **自定义懒加载框架**`lua/lazy.lua`(约 35 行),通过 `on_event` / `on_keys` / `load` 延迟加载重型模块
- **mini.nvim 单体插件集** — starter、pick、extra、files、icons、notify、cmdline、completion、snippets、diff、surround - **mini.nvim 单体插件集** — starter、pick、extra、files、icons、notify、cmdline、completion、snippets、diff、surround
- **LSP + 代码格式化** — nvim-lspconfig + mason + conform.nvim保存时自动格式化 - **LSP + 代码格式化** — nvim-lspconfig + mason + conform.nvim保存时自动格式化,支持全局/Buffer 级别开关
- **快速启动** — 禁用约 20 个内置插件,剪贴板通过 `vim.schedule()` 延迟初始化 - **快速启动** — 禁用约 20 个内置插件,启用 Neovim 0.12+ 内置 UI 增强 (`vim._core.ui2`)
- **启动仪表盘** — ASCII Logo + 实时模块加载统计 + 启动耗时 - **启动仪表盘** — ASCII Logo + 实时模块加载统计 + 启动耗时
- **Colorscheme 优化**`ex-colors.nvim` 提取并生成精简版 colorscheme默认 `ex-catppuccin-mocha`
## 懒加载策略 ## 懒加载策略
@ -20,6 +21,7 @@
| `BufReadPost` | diff、surround | | `BufReadPost` | diff、surround |
| `BufWritePre` | conform | | `BufWritePre` | conform |
| 按键触发 | pick、files、fugitive、grugfar | | 按键触发 | pick、files、fugitive、grugfar |
| 命令触发 | ex-colors (`:ExColors`) |
## 键位映射Leader = 空格) ## 键位映射Leader = 空格)
@ -63,6 +65,7 @@
| `gd` | 跳转到定义 | | `gd` | 跳转到定义 |
| `gh` | 悬停查看文档 | | `gh` | 悬停查看文档 |
| `<leader>ca` | 代码操作 | | `<leader>ca` | 代码操作 |
| `<leader>cr` | 重命名符号 |
| `<leader>fm` | 格式化当前 Buffer | | `<leader>fm` | 格式化当前 Buffer |
| `df` | 显示行诊断浮动窗口 | | `df` | 显示行诊断浮动窗口 |
| `<leader>ds` | 诊断位置列表 | | `<leader>ds` | 诊断位置列表 |
@ -83,7 +86,9 @@
| 键位 | 动作 | | 键位 | 动作 |
|--------------|----------------------------| |--------------|----------------------------|
| `<leader>ss` | 全局替换光标下的单词 | | `<leader>ss` | 全局替换光标下的单词 |
| `<leader>u` | 打开内置撤销树 | | `<leader>ud` | 打开内置撤销树 |
| `<leader>uf` | 切换全局自动格式化 |
| `<leader>uF` | 切换当前 Buffer 自动格式化 |
| `<Esc>` | 清除搜索高亮 | | `<Esc>` | 清除搜索高亮 |
| `J` | 合并行且不移动光标 | | `J` | 合并行且不移动光标 |
@ -119,6 +124,7 @@
:PackAdd user/repo " 添加插件 :PackAdd user/repo " 添加插件
:PackDel plugin-name " 删除插件 :PackDel plugin-name " 删除插件
:PackUpdate [name] " 更新全部或指定插件 :PackUpdate [name] " 更新全部或指定插件
:ExColors! " 提取当前 colorscheme 为优化版 ex-colors
``` ```
## 文件结构 ## 文件结构
@ -138,7 +144,8 @@ lua/plugins/
git.lua -- Git 工具hunk 预览、blame、文件历史 git.lua -- Git 工具hunk 预览、blame、文件历史
nvim-pack-lock.json -- 插件锁定文件 nvim-pack-lock.json -- 插件锁定文件
colors/ colors/
catppuccin-*.lua -- Catppuccin 配色方案mocha 为默认) ex-catppuccin-mocha.lua -- 默认配色ex-colors 生成的优化版)
catppuccin-*.lua -- 原始 Catppuccin 配色方案
``` ```
## 开发 / 验证 ## 开发 / 验证

View File

@ -152,8 +152,6 @@ local logos = {
]], ]],
} }
local starter = require("mini.starter")
-- 所有功能模块列表(用于页脚 "X/Y modules" 统计)。 -- 所有功能模块列表(用于页脚 "X/Y modules" 统计)。
-- 口径与 lazy._loaded 一致:每个独立初始化的功能模块算一个, -- 口径与 lazy._loaded 一致:每个独立初始化的功能模块算一个,
-- 不再按 vim.pack 的插件包统计(如 mini.nvim 包含多个模块)。 -- 不再按 vim.pack 的插件包统计(如 mini.nvim 包含多个模块)。
@ -184,34 +182,39 @@ for _, line in ipairs(logos.f) do
max_header_width = math.max(max_header_width, vim.fn.strdisplaywidth(line)) max_header_width = math.max(max_header_width, vim.fn.strdisplaywidth(line))
end end
starter.setup({ -- mini.starter — 启动页
autoopen = true, -- 无参数启动时自动打开 -- 使用 pcall 保护,避免首次启动插件尚未下载完成时报错
evaluate_single = false, -- 只有一个选项时不自动执行 local ok_starter, starter = pcall(require, "mini.starter")
items = { { name = " ", action = "", section = "" } }, -- 空选项(仅展示页眉页脚) if ok_starter then
header = table.concat(logos.f, "\n"), -- Logo 文本 starter.setup({
autoopen = true, -- 无参数启动时自动打开
evaluate_single = false, -- 只有一个选项时不自动执行
items = { { name = " ", action = "", section = "" } }, -- 空选项(仅展示页眉页脚)
header = table.concat(logos.f, "\n"), -- Logo 文本
-- 页脚函数:显示启动耗时和模块加载统计 -- 页脚函数:显示启动耗时和模块加载统计
footer = function() footer = function()
-- 已加载的模块数(动态统计,包含直接加载和懒加载) -- 已加载的模块数(动态统计,包含直接加载和懒加载)
local loaded = vim.tbl_count(require("lazy")._loaded) local loaded = vim.tbl_count(require("lazy")._loaded)
local total = #all_modules local total = #all_modules
-- 使用 init.lua 执行完成时间,不等待 VimEnter后者包含 runtime 插件加载耗时) -- 使用 init.lua 执行完成时间,不等待 VimEnter后者包含 runtime 插件加载耗时)
local end_time = _G.nvim_init_done or (vim.uv or vim.loop).hrtime() local end_time = _G.nvim_init_done or (vim.uv or vim.loop).hrtime()
local ms = (end_time - _G.nvim_start_time) / 1e6 local ms = (end_time - _G.nvim_start_time) / 1e6
local text = string.format(" %d/%d modules | %.0f ms", loaded, total, ms) local text = string.format(" %d/%d modules | %.0f ms", loaded, total, ms)
local text_width = vim.fn.strdisplaywidth(text) local text_width = vim.fn.strdisplaywidth(text)
-- 计算左填充空格数以实现居中 -- 计算左填充空格数以实现居中
local pad = math.floor((max_header_width - text_width) / 2) local pad = math.floor((max_header_width - text_width) / 2)
return string.rep(" ", pad) .. text return string.rep(" ", pad) .. text
end, end,
-- 内容钩子:水平和垂直居中 -- 内容钩子:水平和垂直居中
content_hooks = { content_hooks = {
starter.gen_hook.aligning("center", "center"), starter.gen_hook.aligning("center", "center"),
}, },
}) })
lazy.track("starter") lazy.track("starter")
end
-- --------------------------------------------------------------------------- -- ---------------------------------------------------------------------------
-- mini.files — 文件浏览器(按键触发懒加载) -- mini.files — 文件浏览器(按键触发懒加载)
@ -282,17 +285,21 @@ vim.api.nvim_create_autocmd("VimEnter", {
-- --------------------------------------------------------------------------- -- ---------------------------------------------------------------------------
-- 替换默认的 vim.notify提供美观的浮动通知窗口。 -- 替换默认的 vim.notify提供美观的浮动通知窗口。
-- 直接初始化(轻量,不阻塞启动)。 -- 直接初始化(轻量,不阻塞启动)。
require("mini.notify").setup({ -- 使用 pcall 保护,避免首次启动插件尚未下载完成时报错
content = { local ok_notify, notify = pcall(require, "mini.notify")
-- 简化格式:只显示消息内容,不附加时间戳等元信息 if ok_notify then
format = function(notif) notify.setup({
return notif.msg content = {
end, -- 简化格式:只显示消息内容,不附加时间戳等元信息
}, format = function(notif)
}) return notif.msg
-- 将 vim.notify 重定向到 mini.notify end,
vim.notify = require("mini.notify").make_notify() },
lazy.track("notify") })
-- 将 vim.notify 重定向到 mini.notify
vim.notify = notify.make_notify()
lazy.track("notify")
end
-- --------------------------------------------------------------------------- -- ---------------------------------------------------------------------------
-- mini.cmdline — 增强命令行 -- mini.cmdline — 增强命令行