VSCode Counter 默认不支持 .m 文件,需手动在 settings.json 中添加 "VSCodeCounter.languages": { "matlab": true } 并重启;同时须检查 exclude 规则避免误杀(如 **/*.m 或 **/*.md),因 glob 不区分大小写;其统计的 code 行不等于实际逻辑行,受 MATLAB 续行符、块注释等语法影响。

VSCode Counter 默认不识别 .m 文件
VSCode Counter 插件默认只统计常见语言(如 JavaScript、Python、Java),.m 文件被归类为“未知语言”,不会计入 code 行,甚至可能被完全跳过。这不是 bug,是插件对语言 ID 的硬编码限制——MATLAB 在 VSCode 中的语言 ID 是 matlab,但插件配置里没声明支持它。
解决办法是手动启用:VSCodeCounter.languages 配置项必须显式加入 "matlab",否则哪怕文件存在、语法高亮正常,统计时也视而不见。
- 打开 VSCode 设置(
Ctrl+,),切到「Settings (JSON)」标签页 - 添加或修改如下字段:
"VSCodeCounter.languages": { "matlab": true } - 保存后重启 VSCode 或重载窗口(
Ctrl+Shift+P→Developer: Reload Window)
排除规则容易误杀 .m 文件
很多人直接复制网上的 exclude 列表,里面常含 "**/*.m" 或模糊匹配如 "**/*.md" ——但 VSCode 的 glob 匹配不区分大小写,.md 会意外匹配 .M 和 .m,导致所有 MATLAB 源文件被跳过。
检查你当前的 VSCodeCounter.exclude 配置,确保没有以下危险项:
-
"**/*.m"(明确排除) -
"**/*.md"(小写md在部分系统下会匹配.M) -
"**/matlab/**"(如果你的代码在matlab/目录下,这个没问题;但如果只是零散.m文件,就别加)
安全写法是只排除真正不需要的:例如 "**/tests/**/*.m"(测试脚本)、"**/legacy/**/*.m"(废弃模块),而不是一刀切。
统计结果里 code 行 ≠ 实际可执行语句行
MATLAB 的语法特性会让 VSCode Counter 的行分类出现偏差:
- 续行符
...后的换行会被算作独立空行或注释行,而非合并到上一行 - 块注释
%{ ... %}跨多行时,首尾两行可能被识别为普通注释,中间行被当成空白行 - 函数定义行(
function out = foo(...))算作code,但嵌套的localfunctions块内代码可能漏计
所以看到 Code lines: 842 时,实际逻辑行数可能略少;更可靠的参考是 Total lines 减去明显无意义的纯空白和块注释包裹层。
不想装插件?用终端命令快速估算
如果只是临时查总数,且项目结构干净(所有 .m 在同一级或子目录),终端一行命令比等插件扫描更快:
Windows(PowerShell):
Get-ChildItem -Recurse -Filter "*.m" | Get-Content | Measure-Object -Line
macOS / Linux:
find . -name "*.m" -exec cat {} \; | wc -l
注意:这统计的是物理总行数(含注释、空行),不分类,但胜在快、无配置陷阱。若需过滤掉空行和纯注释行,得加 grep -v 管道,不过对 MATLAB 来说,% 开头行未必全是注释(比如字符串里有 %),所以人工校验仍有必要。
.m 文件常混着 Simulink 模型(.slx)、数据文件(.mat)、说明文档(.md),插件配置稍一松懈就会把整棵树扫进去或全漏掉。最稳的做法是:先用 find . -name "*.m" | head -10 确认路径模式,再决定 exclude 写法,而不是依赖默认配置。


















