From daffb7e2f581b0f9d0632c287093c382c92522bd Mon Sep 17 00:00:00 2001 From: xfy Date: Fri, 29 May 2026 11:30:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20:PackClean=20=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=EF=BC=8C=E7=94=A8=E4=BA=8E=E6=B8=85=E7=90=86=E6=9C=AA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/usercmds.lua | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/lua/usercmds.lua b/lua/usercmds.lua index ba5cd63..5d2fd87 100644 --- a/lua/usercmds.lua +++ b/lua/usercmds.lua @@ -67,3 +67,32 @@ vim.api.nvim_create_user_command("PackUpdate", function(opts) vim.pack.update() end end, { nargs = "*", desc = "更新所有插件或指定插件" }) + +-- --------------------------------------------------------------------------- +-- :PackClean — 清理已从配置移除的插件 +-- --------------------------------------------------------------------------- +-- 用法::PackClean +-- +-- 原理: +-- 从 vim.pack.get() 获取所有 vim.pack 管理的插件, +-- 过滤出 active = false 的插件(即从 pack.lua 移除后未加载的), +-- 批量调用 vim.pack.del() 删除本地文件。 +-- 如果没有需要清理的插件,会提示 "No unused plugins to clean"。 +-- +-- 注意: +-- 必须先 :restart Neovim,让 vim.pack 识别到插件已不在当前配置中, +-- 否则 active 仍为 true,不会被清理。 +vim.api.nvim_create_user_command("PackClean", function() + local to_clean = vim.iter(vim.pack.get()) + :filter(function(x) return not x.active end) + :map(function(x) return x.spec.name end) + :totable() + + if #to_clean == 0 then + vim.notify("No unused plugins to clean", vim.log.levels.INFO) + return + end + + vim.pack.del(to_clean) + vim.notify("Cleaned " .. #to_clean .. " plugin(s): " .. table.concat(to_clean, ", "), vim.log.levels.INFO) +end, { desc = "删除已从配置移除的本地插件" })