sublime text 无原生一键代码统计功能,需依赖插件或自定义 build system 调用 cloc;project statistics 插件仅提供不可导出的 html 表格,缺乏结构化数据;cloc 支持多语言、自动过滤注释/空行、输出 json/csv,可集成至 sublime build system 实现伪一键统计。

Sublime Text 本身不提供“一键生成项目代码统计报告”的功能,所谓“一键”实际是插件调用命令或自定义 Build System 封装外部工具的结果;真要兼顾代码行数、语言分布、空行/注释过滤,得放弃纯 GUI 插件,转向 cloc 或可控的 shell 命令组合。
Project Statistics 插件能用,但默认不生成结构化报告
它右键菜单里点 Count Lines in Project 确实弹出表格页,但那只是 HTML 格式展示,不能导出为 CSV/JSON,也不含函数/类数量等结构信息。关键限制有:
- 统计结果页面无法复制整表(只能手动拖选)
- 不识别嵌套作用域——比如不会告诉你这个项目有 12 个 class、47 个 def
- 配置
line_filters后能过滤 Python 的#注释和空行,但对"""docstring"""或多行注释中间行无效 - 遇到无扩展名文件(如
Dockerfile、Makefile)或 BOM 编码文件时容易卡住或跳过
用 cloc 替代:一行命令生成带结构的统计报告
cloc 是专为代码统计设计的 CLI 工具,支持 400+ 语言、自动识别注释/空行/字符串字面量,还能输出 XML/JSON/CSV,并附带“Blank”“Comment”“Code”三栏拆分——这才是程序员要的“有效代码行”。
安装后在项目根目录运行:
cloc . --exclude-dir=node_modules,venv,.git,dist --report-file=cloc-report.txt
常见适配点:
- Windows 用户需用 PowerShell 运行,或装 Git Bash;直接 cmd 不支持
--exclude-dir的逗号分隔写法 - 想只统计
.py和.ts:加--include-ext=py,ts - 输出 JSON 便于后续处理:
cloc . --json --out=cloc.json - 它会自动跳过二进制文件(
.png、.zip),不用额外find -type f过滤
在 Sublime 里“伪一键”:Build System 调用 cloc
不想切终端?可以把它塞进 Sublime 的 Build System,按 Ctrl+B 就触发:
菜单 → Tools → Build System → New Build System,粘贴:
{
"shell_cmd": "cloc . --exclude-dir=node_modules,venv,.git --json --out=- 2>/dev/null || echo 'cloc not found. Install via brew install cloc (macOS) or choco install cloc (Windows)'",
"working_dir": "$project_path",
"selector": "source"
}
保存为 Cloc.sublime-build,然后按 Ctrl+Shift+P 输入 Build With: Cloc 即可。注意:
- 输出是 JSON 文本,直接显示在 Sublime 底部面板,可全选复制
- 如果
$project_path为空(没打开文件夹项目),cloc会报错或统计当前文件所在目录 - 该 Build 不会自动刷新视图,结果不支持点击跳转——它只是命令输出,不是 IDE 级集成
别指望 Sublime 原生或插件做结构分析
所谓“结构统计”,比如函数数、类数、模块依赖、圈复杂度,Sublime 没语法树解析能力,所有插件(LineCounter、CodeMetrics)都靠正则硬匹配,极易误判:
-
def foo():在字符串里也会被当函数声明计数 -
class A:后面换行缩进不对,就漏掉整个类体 - JS 的箭头函数
const fn = () => {}和方法简写fn() {}无法统一识别
真需要结构数据,应直接用语言专属工具:pylint --reports=y、eslint --format=json、ts-morph 解析 AST,再汇总。Sublime 只适合做轻量级行数快照,不是分析平台。











