From 0747abefee2703e7201d4ecd847657c60d3e0857 Mon Sep 17 00:00:00 2001 From: xfy Date: Thu, 28 May 2026 16:05:59 +0800 Subject: [PATCH] Use VimEnter time for more accurate startup duration in starter dashboard Prioritize _G.nvim_vimenter_done (recorded when runtime plugins and ShaDa are fully loaded) for the startup time displayed in mini.starter's footer, falling back to _G.nvim_init_done if unavailable. This makes the reported duration much closer to what --startuptime measures. Co-Authored-By: Claude Opus 4.7 (1M context) --- init.lua | 4 ++++ lua/pack.lua | 19 ++++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/init.lua b/init.lua index 5c7164f..bfac505 100644 --- a/init.lua +++ b/init.lua @@ -86,3 +86,7 @@ vim.g.moonflyTransparent = true -- 应用 colorscheme。catppuccin-mocha 的定义在 colors/catppuccin-mocha.lua 中。 -- 该文件是一个精简版,只包含 Mocha 变体的调色板和高亮组定义。 vim.cmd("colorscheme catppuccin-mocha") + +-- 记录 init.lua 执行完成时间(含 colorscheme),供启动页展示更接近 --startuptime 的耗时。 +-- pack.lua 中的 footer 优先使用 VimEnter 时间,回退到此时间点。 +_G.nvim_init_done = (vim.uv or vim.loop).hrtime() diff --git a/lua/pack.lua b/lua/pack.lua index c6b2395..aafbedc 100644 --- a/lua/pack.lua +++ b/lua/pack.lua @@ -27,9 +27,15 @@ local lazy = require("lazy") local pick = require("pick") require("git") --- 缓存启动耗时。pack.lua 在 init.lua 末尾加载,此时核心配置已全部就绪, --- 计算出的时间就是真正的启动耗时。避免 starter 页脚在后续渲染时数值持续增长。 -local startup_ms = ((vim.uv or vim.loop).hrtime() - _G.nvim_start_time) / 1e6 +-- 在 VimEnter 时记录完整启动时间(此时 runtime 插件、ShaDa 等已加载完毕), +-- 使启动页显示的耗时更接近 --startuptime 的口径。 +-- starter 的 autoopen 在 VimEnter 之后渲染,footer 可以安全读取此值。 +vim.api.nvim_create_autocmd("VimEnter", { + once = true, + callback = function() + _G.nvim_vimenter_done = (vim.uv or vim.loop).hrtime() + end, +}) -- --------------------------------------------------------------------------- -- 插件安装声明 @@ -99,8 +105,11 @@ starter.setup({ -- 已加载的模块数(动态统计,包含直接加载和懒加载) local loaded = vim.tbl_count(require("lazy")._loaded) local total = #all_modules - -- startup_ms 在 pack.lua 加载时一次性计算,避免后续渲染时数值变化 - local text = string.format(" %d/%d modules | %.0f ms", loaded, total, startup_ms) + -- 优先使用 VimEnter 时间(runtime 插件、ShaDa 等已加载,最接近 --startuptime), + -- 回退到 init.lua 完成时间,最后回退到当前时间(理论上不会走到) + local end_time = _G.nvim_vimenter_done or _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)