From 2c524fc30d70fcdf6886d9f59354f5e9baffa33c Mon Sep 17 00:00:00 2001 From: xfy Date: Thu, 28 May 2026 15:07:01 +0800 Subject: [PATCH] Refactor lazy loading: unify treesitter/LSP deferral via lazy.on_event - Move VimEnter autocmd from init.lua to pack.lua using lazy.on_event - Convert treesitter.lua to modular M.setup() pattern - Simplify lsp.lua: remove redundant comment, inline diagnostic config - Reorganize pack.lua: group finders, add fugitive keymaps, adjust header indent Co-Authored-By: Claude Opus 4.7 (1M context) --- init.lua | 9 ------- lua/lsp.lua | 8 +----- lua/pack.lua | 62 ++++++++++++++++++++++++---------------------- lua/treesitter.lua | 55 ++++++++++++++++++++-------------------- 4 files changed, 61 insertions(+), 73 deletions(-) diff --git a/init.lua b/init.lua index a44364a..1b875d3 100644 --- a/init.lua +++ b/init.lua @@ -40,12 +40,3 @@ require("pack") vim.g.moonflyTransparent = true vim.cmd("colorscheme catppuccin-mocha") - --- 延迟加载 heavy 模块,避免阻塞启动 -vim.api.nvim_create_autocmd("VimEnter", { - once = true, - callback = function() - require("treesitter") - require("lsp") - end, -}) diff --git a/lua/lsp.lua b/lua/lsp.lua index 2d86d67..89c7797 100644 --- a/lua/lsp.lua +++ b/lua/lsp.lua @@ -44,7 +44,6 @@ lazy.on_event("conform", "BufWritePre", "*", function() end) -- mason + LSP 配置 --- 由 init.lua 在 VimEnter 时 require,此处直接执行 vim.cmd.packadd("nvim-lspconfig") require("mason").setup() @@ -124,9 +123,4 @@ vim.keymap.set("n", "[e", diagnostic_goto(false, "ERROR"), { desc = "Prev Error" vim.keymap.set("n", "]w", diagnostic_goto(true, "WARN"), { desc = "Next Warning" }) vim.keymap.set("n", "[w", diagnostic_goto(false, "WARN"), { desc = "Prev Warning" }) -vim.api.nvim_create_autocmd("VimEnter", { - once = true, - callback = function() - vim.diagnostic.config({ virtual_text = true }) - end, -}) +vim.diagnostic.config({ virtual_text = true }) diff --git a/lua/pack.lua b/lua/pack.lua index 8b8ac54..5eeb8bf 100644 --- a/lua/pack.lua +++ b/lua/pack.lua @@ -29,12 +29,12 @@ end local header_lines = { "", - " ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗", - " ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║", - " ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║", - " ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║", - " ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║", - " ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝", + "███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗", + "████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║", + "██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║", + "██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║", + "██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║", + "╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝", "", } @@ -123,42 +123,44 @@ vim.keymap.set("n", ":", function() return ":" end, { expr = true, noremap = true }) --- mini.surround - BufReadPost -lazy.on_event("surround", "BufReadPost", "*", function() - require("mini.surround").setup() -end) +vim.keymap.set("n", "ds", function() + vim.diagnostic.setloclist() +end, { desc = "LSP diagnostic loclist" }) --- mini.pick + mini.extra - 按键触发 +-- finders lazy.on_keys("pick", "ff", "n", pick.load_pick, function() require("mini.pick").builtin.files() end, { desc = "Mini File Picker" }) - lazy.on_keys("pick", "fw", "n", pick.load_pick, function() require("mini.pick").builtin.grep_live() end, { desc = "Live grep in project" }) - -vim.keymap.set("n", "ds", function() vim.diagnostic.setloclist() end, { desc = "LSP diagnostic loclist" }) - lazy.on_keys("pick", "sk", "n", pick.load_pick, function() require("mini.extra").pickers.keymaps() end, { desc = "Search keymaps" }) - lazy.on_keys("pick", "fa", "n", pick.load_pick, function() require("mini.pick").builtin.cli({ command = { "rg", "--files", "--hidden", "--no-ignore", "--color=never" } }) end, { desc = "Find all files (including hidden/ignored)" }) - lazy.on_keys("pick", "fh", "n", pick.load_pick, function() require("mini.pick").builtin.help() end, { desc = "Search help tags" }) - lazy.on_keys("pick", "fo", "n", pick.load_pick, function() require("mini.extra").pickers.oldfiles() end, { desc = "Search oldfiles" }) - lazy.on_keys("pick", "fz", "n", pick.load_pick, function() require("mini.extra").pickers.buf_lines({ scope = "current" }) end, { desc = "Search in current buffer" }) +-- vim-fugitive - 按键触发 +local function load_fugitive() + vim.cmd.packadd("vim-fugitive") +end +lazy.on_keys("fugitive", "gg", "n", load_fugitive, function() + vim.cmd("tabnew | Git | only") +end, { desc = "Fugitive Full Page New Tab" }) +lazy.on_keys("fugitive", "gd", "n", load_fugitive, function() + vim.cmd("Gvdiffsplit") +end, { desc = "Git diff split" }) + -- mini.completion - InsertEnter lazy.on_event("completion", "InsertEnter", "*", function() require("mini.completion").setup({ @@ -194,15 +196,15 @@ lazy.on_event("diff", "BufReadPost", "*", function() }) end) --- vim-fugitive - 按键触发 -local function load_fugitive() - vim.cmd.packadd("vim-fugitive") -end +-- mini.surround - BufReadPost +lazy.on_event("surround", "BufReadPost", "*", function() + require("mini.surround").setup() +end) -lazy.on_keys("fugitive", "gg", "n", load_fugitive, function() - vim.cmd("tabnew | Git | only") -end, { desc = "Fugitive Full Page New Tab" }) - -lazy.on_keys("fugitive", "gd", "n", load_fugitive, function() - vim.cmd("Gvdiffsplit") -end, { desc = "Git diff split" }) +-- 延迟加载 heavy 模块 +lazy.on_event("treesitter", "VimEnter", "*", function() + require("treesitter").setup() +end) +lazy.on_event("lsp", "VimEnter", "*", function() + require("lsp") +end) diff --git a/lua/treesitter.lua b/lua/treesitter.lua index 39c23cd..88c4734 100644 --- a/lua/treesitter.lua +++ b/lua/treesitter.lua @@ -1,3 +1,5 @@ +local M = {} + local ensure_installed = { "lua", "vim", @@ -24,35 +26,34 @@ local ensure_installed = { "make", } -vim.api.nvim_create_autocmd("VimEnter", { - once = true, - callback = function() - vim.cmd.packadd("nvim-treesitter") - local treesitter = require("nvim-treesitter") +M.setup = function() + vim.cmd.packadd("nvim-treesitter") + local treesitter = require("nvim-treesitter") - -- 延迟安装 parser,避免阻塞 - vim.defer_fn(function() - treesitter.install(ensure_installed) - end, 100) + -- 延迟安装 parser,避免阻塞 + vim.defer_fn(function() + treesitter.install(ensure_installed) + end, 100) - vim.api.nvim_create_autocmd("FileType", { - pattern = "*", - callback = function(args) - local buf = args.buf - local ft = vim.bo[buf].filetype + vim.api.nvim_create_autocmd("FileType", { + pattern = "*", + callback = function(args) + local buf = args.buf + local ft = vim.bo[buf].filetype - local lang = vim.treesitter.language.get_lang(ft) - if not lang then - return - end + local lang = vim.treesitter.language.get_lang(ft) + if not lang then + return + end - local ok_add = pcall(vim.treesitter.language.add, lang) - if not ok_add then - return - end + local ok_add = pcall(vim.treesitter.language.add, lang) + if not ok_add then + return + end - pcall(vim.treesitter.start, buf, lang) - end, - }) - end, -}) + pcall(vim.treesitter.start, buf, lang) + end, + }) +end + +return M