Sublime Text无法原生批量修改文件后缀,所有操作均依赖外部命令;必须通过Project→Add Folder to Project显式添加目录、重启并启用"enable_batch_rename":true、输入新后缀时只填ts不填.ts,且需关闭atomic_save以防标签页失效。

Sublime Text 没有内置批量修改文件后缀名的功能——它不操作文件系统,所有“批量改后缀”都是调用外部命令(mv、Rename-Item 或 ren)的外壳。你看到的菜单项只是触发器,不是编辑器原生能力。
SideBarEnhancements 的 Batch Rename 为什么右键不出现
这不是插件没装好,而是三个硬条件缺一不可:
- 必须通过
Project → Add Folder to Project…显式添加目录;拖进窗口或双击打开不算“项目上下文” - 安装插件后需重启 Sublime;ST4 某些版本还需手动执行
Package Control: Satisfy Dependencies - 检查
Packages/User/SideBarEnhancements.sublime-settings,确保含"enable_batch_rename": true
少一个,右键就只有 Rename(单个),没有 Batch Rename。别猜,直接打开设置文件查。
输入新后缀时填 ts 还是 .ts
填 ts,不是 .ts。插件会自动补点;填 .ts 会导致生成 ..ts,文件名直接损坏。
更隐蔽的坑在模板写法:{{name}}.ts 看似合理,但 {{name}} 已含原扩展名(如 utils.js),结果变成 utils.js.ts。正确做法是:
- 只选中
.js文件,再填ts - 或用插件支持的过滤器:
{{name|replace:'.js':''}}.ts
atomic_save 导致标签页卡在旧文件名
改完后 Sublime 标签页仍显示 utils.js(带星号 *),这不是 Bug,是 "atomic_save": true 在起作用:它让编辑器继续往旧路径写内容,而磁盘上文件早已变成 utils.ts。
后果很实际:你保存后,内容可能写回一个已不存在的路径,或覆盖错误文件。
解决方法很简单:
- 打开
Preferences → Settings - 在右侧用户设置中加入:
"atomic_save": false - 验证是否生效:重命名后看标签页标题是否立刻变成
utils.ts;若仍是旧名+星号,说明没生效
命令行比插件更可控,尤其处理嵌套或排除逻辑
当你需要递归改 src/**/.js、跳过 node_modules、或只处理含 _test 的文件时,插件模板语法基本失效。这时候切终端才是正解:
macOS/Linux:
for f in src/**/*.js; do [ -f "$f" ] && mv "$f" "${f%.js}.ts"; done
Windows PowerShell:
Get-ChildItem -Recurse -Include "*.js" -Path ./src | Where-Object {! $_.DirectoryPath.Contains("node_modules")} | Rename-Item -NewName { $_.Name -replace '\.js$', '.ts' }
关键细节:
- 执行前先跑
ls src/**/*.js或Get-ChildItem src/**/*.js,确认范围 -
${f%.js}是 Bash 参数展开,PowerShell 不支持,必须用-replace或$_.BaseName - 含空格路径必须加引号:
"$f",否则file name.js被拆成两个参数,mv报错
改完后别忘了用 Sublime 的 Find in Files 全局搜索 require('./utils.js') 这类引用,手动替换成新后缀——这才是真正收尾的一步。


















