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
- **自定义懒加载框架**`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保存时自动格式化
- **快速启动** — 禁用约 20 个内置插件,剪贴板通过 `vim.schedule()` 延迟初始化
- **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`
## 懒加载策略
@ -20,6 +21,7 @@
| `BufReadPost` | diff、surround |
| `BufWritePre` | conform |
| 按键触发 | pick、files、fugitive、grugfar |
| 命令触发 | ex-colors (`:ExColors`) |
## 键位映射Leader = 空格)
@ -63,6 +65,7 @@
| `gd` | 跳转到定义 |
| `gh` | 悬停查看文档 |
| `<leader>ca` | 代码操作 |
| `<leader>cr` | 重命名符号 |
| `<leader>fm` | 格式化当前 Buffer |
| `df` | 显示行诊断浮动窗口 |
| `<leader>ds` | 诊断位置列表 |
@ -83,7 +86,9 @@
| 键位 | 动作 |
|--------------|----------------------------|
| `<leader>ss` | 全局替换光标下的单词 |
| `<leader>u` | 打开内置撤销树 |
| `<leader>ud` | 打开内置撤销树 |
| `<leader>uf` | 切换全局自动格式化 |
| `<leader>uF` | 切换当前 Buffer 自动格式化 |
| `<Esc>` | 清除搜索高亮 |
| `J` | 合并行且不移动光标 |
@ -119,6 +124,7 @@
:PackAdd user/repo " 添加插件
:PackDel plugin-name " 删除插件
:PackUpdate [name] " 更新全部或指定插件
:ExColors! " 提取当前 colorscheme 为优化版 ex-colors
```
## 文件结构
@ -138,7 +144,8 @@ lua/plugins/
git.lua -- Git 工具hunk 预览、blame、文件历史
nvim-pack-lock.json -- 插件锁定文件
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" 统计)。
-- 口径与 lazy._loaded 一致:每个独立初始化的功能模块算一个,
-- 不再按 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))
end
starter.setup({
autoopen = true, -- 无参数启动时自动打开
evaluate_single = false, -- 只有一个选项时不自动执行
items = { { name = " ", action = "", section = "" } }, -- 空选项(仅展示页眉页脚)
header = table.concat(logos.f, "\n"), -- Logo 文本
-- mini.starter — 启动页
-- 使用 pcall 保护,避免首次启动插件尚未下载完成时报错
local ok_starter, starter = pcall(require, "mini.starter")
if ok_starter then
starter.setup({
autoopen = true, -- 无参数启动时自动打开
evaluate_single = false, -- 只有一个选项时不自动执行
items = { { name = " ", action = "", section = "" } }, -- 空选项(仅展示页眉页脚)
header = table.concat(logos.f, "\n"), -- Logo 文本
-- 页脚函数:显示启动耗时和模块加载统计
footer = function()
-- 已加载的模块数(动态统计,包含直接加载和懒加载)
local loaded = vim.tbl_count(require("lazy")._loaded)
local total = #all_modules
-- 使用 init.lua 执行完成时间,不等待 VimEnter后者包含 runtime 插件加载耗时)
local end_time = _G.nvim_init_done or (vim.uv or vim.loop).hrtime()
local ms = (end_time - _G.nvim_start_time) / 1e6
local text = string.format(" %d/%d modules | %.0f ms", loaded, total, ms)
local text_width = vim.fn.strdisplaywidth(text)
-- 计算左填充空格数以实现居中
local pad = math.floor((max_header_width - text_width) / 2)
return string.rep(" ", pad) .. text
end,
-- 页脚函数:显示启动耗时和模块加载统计
footer = function()
-- 已加载的模块数(动态统计,包含直接加载和懒加载)
local loaded = vim.tbl_count(require("lazy")._loaded)
local total = #all_modules
-- 使用 init.lua 执行完成时间,不等待 VimEnter后者包含 runtime 插件加载耗时)
local end_time = _G.nvim_init_done or (vim.uv or vim.loop).hrtime()
local ms = (end_time - _G.nvim_start_time) / 1e6
local text = string.format(" %d/%d modules | %.0f ms", loaded, total, ms)
local text_width = vim.fn.strdisplaywidth(text)
-- 计算左填充空格数以实现居中
local pad = math.floor((max_header_width - text_width) / 2)
return string.rep(" ", pad) .. text
end,
-- 内容钩子:水平和垂直居中
content_hooks = {
starter.gen_hook.aligning("center", "center"),
},
})
-- 内容钩子:水平和垂直居中
content_hooks = {
starter.gen_hook.aligning("center", "center"),
},
})
lazy.track("starter")
lazy.track("starter")
end
-- ---------------------------------------------------------------------------
-- mini.files — 文件浏览器(按键触发懒加载)
@ -282,17 +285,21 @@ vim.api.nvim_create_autocmd("VimEnter", {
-- ---------------------------------------------------------------------------
-- 替换默认的 vim.notify提供美观的浮动通知窗口。
-- 直接初始化(轻量,不阻塞启动)。
require("mini.notify").setup({
content = {
-- 简化格式:只显示消息内容,不附加时间戳等元信息
format = function(notif)
return notif.msg
end,
},
})
-- 将 vim.notify 重定向到 mini.notify
vim.notify = require("mini.notify").make_notify()
lazy.track("notify")
-- 使用 pcall 保护,避免首次启动插件尚未下载完成时报错
local ok_notify, notify = pcall(require, "mini.notify")
if ok_notify then
notify.setup({
content = {
-- 简化格式:只显示消息内容,不附加时间戳等元信息
format = function(notif)
return notif.msg
end,
},
})
-- 将 vim.notify 重定向到 mini.notify
vim.notify = notify.make_notify()
lazy.track("notify")
end
-- ---------------------------------------------------------------------------
-- mini.cmdline — 增强命令行