Sublime Text 原生不支持 VBScript 格式化,必须手动配置 CodeFormatter 插件的 codeformatter_vbscript_options,否则缩进错乱、ElseIf 不换行、End Function 被吞;它是唯一通过正则匹配块级标签实现正确缩进的方案,且不依赖外部 CLI 工具。

Sublime Text 原生不支持 VBScript 格式化,必须用 CodeFormatter 插件,且不能靠“自动检测”——codeformatter_vbscript_options 必须手动配全,否则缩进错乱、ElseIf 不换行、End Function 被吞掉都是常态。
为什么 CodeFormatter 是唯一靠谱的选择
VBScript 语法特殊:块级结构靠 Function/Sub/If 开启,End Function/End Sub/End If 关闭,中间还有 Else/ElseIf 分隔。其他插件(如 JsPrettier、HTML-CSS-JS Prettify)根本不识别这些关键词,一格式化就崩。
-
CodeFormatter是目前唯一通过正则匹配opening_tags、middle_tags、closing_tags实现 VBScript 块级缩进的方案 - 它不依赖外部 CLI 工具(不像 JsPrettier 依赖 prettier),装完即用,避免 Windows 路径空格、
.cmd后缀、PATH 查找失败等问题 - 配置项粒度细:能单独控制
indent_size、是否保留原有空行、ElseIf是否独占一行等
关键配置项必须手填,不能留空
默认配置对 VBScript 几乎无效。打开 Preferences → Package Settings → CodeFormatter → Settings,在用户设置里补全以下字段:
-
"indent_size": 4—— 别用默认的 1,否则缩进太窄,For循环嵌套两层就看不清 -
"indent_char": " "+"indent_with_tabs": false—— VBScript 社区惯例用空格,混用制表符会导致 WSH 运行时报Expected identifier -
"preserve_newlines": true—— 关掉会把多行注释' ...拉成一行,破坏可读性 -
"opening_tags": ["Function", "Sub", "If", "For", "While", "With"]—— 必须显式列出,漏掉With会导致对象块不缩进 -
"middle_tags": ["Else", "ElseIf", "Case"]—— 缺Case会让Select Case块内语句顶格 -
"closing_tags": ["End Function", "End Sub", "End If", "Next", "Wend", "End With"]——Wend容易被忽略,但老 ASP 代码里还大量存在
快捷键和触发方式要绕过两个坑
装完插件后按默认快捷键没反应?不是插件坏了,是这两个地方卡住了:
- 右下角语法识别必须是
VBScript,不是Plain Text—— 如果显示 Plain Text,点右下角手动切;或先保存为.vbs后缀再打开 -
CodeFormatter默认没绑定快捷键,得自己加:Preferences → Key Bindings用户文件里写:[ { "keys": ["ctrl+alt+v"], "command": "code_formatter", "args": {"syntax": "vbscript"} } ]不要用ctrl+shift+f或ctrl+alt+f,它们早被其他插件占了 - 命令面板调用更稳:
Ctrl+Shift+P→ 输入CodeFormatter: Format Code→ 回车,比快捷键少一层映射失败风险
格式化后还要人工检查的三处硬伤
CodeFormatter 能处理块结构,但 VBScript 的动态特性让它无法安全处理这三类情况:
- 字符串里含换行符:
str = "line1" & vbCrLf & "line2"—— 格式化可能把&拆到下一行,导致运行时语法错误 - 注释紧贴代码:
Dim x: x = 1 ' init—— 可能被强行断成两行,注释飘走 - WSH 特有语法:
WScript.Echo、CreateObject("Scripting.FileSystemObject")等长名未对齐,插件不会帮你美化,得靠人眼扫
真正稳定的流程是:先全选 → Ctrl+Shift+P 调用格式化 → 看一眼 End 关键词是否对齐 → 手动微调字符串和注释位置。别指望一键到底。


















