From 4bd841fab146f746073eac39100a36151ba3d72e Mon Sep 17 00:00:00 2001 From: xfy Date: Fri, 29 May 2026 10:57:19 +0800 Subject: [PATCH] =?UTF-8?q?docs(readme):=20=E8=A1=A5=E5=85=85=20ex-colors?= =?UTF-8?q?=E3=80=81=E9=94=AE=E4=BD=8D=E6=98=A0=E5=B0=84=E7=AD=89=E6=96=87?= =?UTF-8?q?=E6=A1=A3;=20fix(pack):=20mini.starter/notify=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20pcall=20=E4=BF=9D=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 +++++++--- lua/pack.lua | 83 ++++++++++++++++++++++++++++------------------------ 2 files changed, 56 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index ea4756e..90d0f2e 100644 --- a/README.md +++ b/README.md @@ -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` | 悬停查看文档 | | `ca` | 代码操作 | +| `cr` | 重命名符号 | | `fm` | 格式化当前 Buffer | | `df` | 显示行诊断浮动窗口 | | `ds` | 诊断位置列表 | @@ -83,7 +86,9 @@ | 键位 | 动作 | |--------------|----------------------------| | `ss` | 全局替换光标下的单词 | -| `u` | 打开内置撤销树 | +| `ud` | 打开内置撤销树 | +| `uf` | 切换全局自动格式化 | +| `uF` | 切换当前 Buffer 自动格式化 | | `` | 清除搜索高亮 | | `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 配色方案 ``` ## 开发 / 验证 diff --git a/lua/pack.lua b/lua/pack.lua index 8cdc8af..55ee5ca 100644 --- a/lua/pack.lua +++ b/lua/pack.lua @@ -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 — 增强命令行