离线提取插件列表需手动遍历packages目录并处理installed packages中的.sublime-package文件:先复制packages下非空子文件夹名(排除user、default等),再解析installed packages中文件名(去后缀、版本号,保留驼峰命名),最后通过控制台reloading plugin日志验证完整性。

离线提取插件列表只能靠手动遍历 Packages 目录
Sublime Text 没有内置命令能导出“所有已安装插件”的完整清单,尤其在离线环境下,Package Control: List Packages 命令根本不可用——它依赖 Package Control 后台服务,而离线时该服务无法初始化或联网校验。唯一可靠方式是直接读取 Packages/ 目录下的物理文件结构。
注意:Packages/ 里看到的每个非空文件夹(如 GitGutter、Emmet)基本就对应一个手动安装或解压后启用的插件;但 Installed Packages/ 下的 .sublime-package 文件不会出现在这里,它们得单独处理。
- 打开菜单 Preferences → Browse Packages…,这会直接跳转到当前生效的
Packages/目录 - 用文件管理器全选该目录下所有**非空子文件夹**(排除
User、Default等内置包,除非你明确改过它们) - 把文件夹名复制进文本文件,一行一个,例如:
GitGutter Emmet BracketHighlighter
- 别漏掉大小写:macOS/Linux 下
emmet和Emmet是两个不同路径,Sublime 只加载后者
如何识别 Installed Packages/ 中的 .sublime-package 插件
Installed Packages/ 目录存放的是通过 Package Control 下载的压缩包,它们不展开为文件夹,但仍是“已安装”状态。离线时无法调用 list_packages API 获取这些名字,只能靠文件名推断。
进入 Installed Packages/ 目录(它的位置和 Packages/ 同级,可通过 sublime.installed_packages_path() 在控制台确认),查看所有 .sublime-package 文件:
- 文件名通常就是插件名,比如
GitGutter.sublime-package→ 插件名是GitGutter - 有些会带版本号或分隔符,如
ConvertToUTF8-2.4.0.sublime-package,实际插件名仍是ConvertToUTF8 - 删掉
.sublime-package后缀,去掉数字和连字符,保留首字母大写的驼峰命名即可 - 若遇到
Package Control.sublime-package,它是管理器本身,不是用户插件,可忽略
保存列表时必须排除干扰项
直接复制文件夹名看似简单,但容易混入无效条目。以下几类必须过滤掉:
-
User文件夹:这是用户配置目录,不是插件 -
Default、JavaScript、PHP等内置语法包:它们属于 Sublime 自带功能,非第三方插件 - 名字含
-master、-main、dev或空格的文件夹:大概率是 GitHub ZIP 解压残留,Sublime 不识别,应重命名为规范名后再计入 - 同名共存:比如既有
Emmet文件夹,又有Emmet.sublime-package,只记一次Emmet即可,重复会误导后续迁移
验证列表是否完整的最简方法
生成完文本列表后,不能只靠“看起来全”,得快速验证是否漏项。最有效办法是重启 Sublime Text 后检查控制台:
- 按
Ctrl+`打开控制台,观察启动日志 - 搜索
reloading plugin,每行后面跟着的模块名就是 Sublime 实际加载的插件名(如reloading plugin GitGutter.git_gutter→ 插件名是GitGutter) - 把日志里出现的所有插件名,和你整理的列表逐一对比,缺哪个补哪个
- 如果某插件没出现在日志里,说明它没被加载——可能是
ignored_packages里禁用了,或文件夹权限不对,或 Python 模块导入失败(控制台会报ImportError)
离线环境里,控制台日志是你唯一可信的“插件运行时证据”,比任何文件存在性都更真实。











