VSCode 自带搜索替换不支持文件重命名,需用 Rename Files 插件或命令行工具;插件支持 JS 风格正则,如 /^old_(w+).ts$/ → new_$1.ts,注意转义与路径斜杠;终端方案更灵活但需注意工作目录和隐藏文件。

VSCode 的搜索替换不支持文件重命名
VSCode 自带的 Ctrl+H(或 Cmd+H)只能改文件内容,不能改文件名。想用正则批量重命名文件,必须借助外部工具或插件——这是最常被误以为“能直接做”的地方。
推荐方案:使用 Rename Files 插件 + 正则语法
插件 Rename Files(作者: rick44)是目前最稳定、正则支持最完整的 VSCode 文件重命名扩展。安装后右键文件夹或文件 → Rename Files,会弹出输入框,支持 JavaScript 风格正则和替换语法。
- 匹配语法用
/pattern/flags,比如/^old_(w+).ts$/捕获文件名主体 - 替换部分用
$1引用捕获组,如new_$1.ts - 注意:路径中斜杠方向要与系统一致(Windows 用
\或正斜杠均可,但需转义反斜杠) - 预览模式默认开启,可逐个勾选生效,避免误操作
常见正则陷阱和绕过方式
不是所有正则写法都能被插件正确解析,尤其涉及边界符和特殊字符时:
-
^和$匹配的是完整文件名(不含路径),不是行首行尾——例如^src/无效,应写成^src_ - 点号
.在文件名里是字面量,但扩展名中的点需转义:.js才能匹配index.js - 空格、括号、中括号等特殊字符必须用
转义,否则会被当作正则元字符处理 - 大小写敏感默认开启;若要忽略,加
i标志,如/OLD_(w+).ts/i
替代方案:命令行 + find/sed(macOS/Linux)或 PowerShell(Windows)
如果插件不满足需求(比如要跨目录递归、结合 Git 状态过滤),直接上终端更可控:
- macOS/Linux 示例(重命名所有
test_*.py为spec_*.py):find . -name "test_*.py" -exec bash -c 'mv "$1" "${1/test_/spec_}"' _ {} ; - PowerShell 示例(Windows,需在 VSCode 终端启用 PS):
Get-ChildItem -Recurse -Filter "old_*.ts" | Rename-Item -NewName { $_.Name -replace "^old_(.+).ts$", "new_$1.ts" } - 注意:PowerShell 的
-replace是正则替换,但不支持g标志,一次只换第一个匹配;多处替换需用[regex]::Replace()
真正麻烦的不是写正则,而是确认当前工作目录、通配范围和是否包含隐藏文件——这些细节漏掉,就容易只重命名了部分文件。


















