piapia123
zh

VBScript 代码格式化

格式化

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

VBScript 代码的缩进重排。按 `Sub` / `If … End If` / `For … Next` / `Do … Loop` / `Select Case … End Select` 这些块关键字的配对算出每一行该缩进几层。 ⚠️ 这里要说清一件事:这一页没有语法树。 本站另外七个语言格式化工具(Python / Ruby / Java / C / C# / PHP / Perl)都用 tree-sitter 真的解析出语法树,缩进块由解析器给出。VBScript 做不到 —— 现成的语法根本不存在:公共的 tree-sitter 语法包里没有 VBScript,npm 上唯一一个 VBA 语法是 C++ 原生插件、浏览器里跑不了。 所以这里退一步用关键字配对。它比「数括号」强得多 —— 认得字符串与注释里的假关键字(`"End If"` 不会被当成收尾)、认得单行 `If`(`If x Then y = 1` 没有 `End If`)、认得行尾 `_` 续行 —— 但它回答不了「这一行的 `}` 属于哪个块」这类问题。一份语法本身就有错的代码,这里给的缩进可能不合你的本意;而那七个语言即使遇到语法错,块边界仍然来自解析器。这一点如实写在这里,不藏着。 ⚠️ 只改每行开头的空白,行内一个字符都不动。 续行、字符串、注释里的任何内容都不会被碰到。 好处是它不需要下载任何东西(另外七个各要一份几百 KB 到 5 MB 的语法文件),打开就能用。

功能

  • 按 Sub / Function / If / For / Do / While / Select Case / With / Class 的配对缩进
  • 认得单行 If(`If x Then y = 1` 不会被当成块的开头)
  • 字符串与注释里的 `End If` 之类不参与配对
  • 行尾 `_` 的续行整行保留,不会被拆开
  • 只改行首空白,行内一个字符都不动
  • 缩进可选 2 空格 / 4 空格 / 制表符
  • 关键字大小写不敏感(VBScript 本身就不敏感)
  • 支持代码高亮显示
  • 全部在本机完成,代码不上传,也不需要下载语法文件

使用方法

  1. 把代码粘贴到左侧
  2. 选择缩进宽度
  3. 按 Ctrl/⌘ + Enter 或点「运行」
  4. 点「复制」取走结果

常见问题

它和同一个站里 Python / Java 那些格式化工具是一回事吗?
不是,能力上有实打实的差距,这里说清楚。 那些工具用 tree-sitter 把代码解析成语法树,每一行的层级由它所属的语法结构决定 —— 解析器知道哪个 `}` 属于哪个块。 VBScript 没有可用的语法文件(公共的 tree-sitter 语法包里没有它,npm 上唯一的 VBA 语法是原生插件、浏览器里跑不了),所以这里用的是关键字配对:认得出 `If … End If`、`For … Next` 这类配对,按配对算层级。 差别在语法错的代码上:语法树能告诉你「不管语法对不对,这个块的边界在这里」;关键字配对只能告诉你「这一行的第一个词是块关键字」。所以如果一份代码的语法本身就错了,这里的缩进可能不合你的本意。
我的代码用了单行 If,会被弄乱吗?
不会。VBScript 里 `If x Then y = 1` 这种单行写法没有 `End If`,如果把它当块的开头,后面每一行都会被越推越深。 这里的判据是整行是否以 `Then` 结尾:`If x Then` 是块式,`If x Then y = 1` 是单行式,两者分开处理。`If x Then ' 说明` 这种「Then 后面跟注释」的写法仍然算块式 —— 注释会先被去掉再判断。
字符串和注释里的关键字会被误认吗?
不会。判断结构之前会先剥掉注释、并且认得出字符串:`s = "End If"` 里的 `End If` 不是关键字,`' End Sub` 整行是注释。 字符串里的两个连续引号(`"他说 ""好"""`)也按 VBScript 的规则当成一个转义引号,不会把字符串提前结束。
它会动我的代码内容吗?
不会。这里只改每行开头的空白 —— 行内的一个字符都不动,不重排、不换行、不删行、不动字符串与注释。行尾 `_` 的续行整行保留,因为那一行的缩进是你自己排的,重排它等于把一条语句拆成两段。 顺带一提,这也意味着它不能替你补上缺失的语法。它是缩进工具,不是代码修复工具。

相关工具