subl 命令不自动创建文件或父目录,仅打开路径对应缓冲区;文件需手动保存才落盘,多级目录须提前用 mkdir -p 创建,脚本中应配合 touch 和 -w 参数确保可靠性。

subl 命令本身不“创建”文件,它只是打开——如果路径不存在,Sublime Text 会新建一个空白缓冲区并关联该路径;保存时才真正落盘。 这个行为容易被误解为“自动创建文件”,但实际依赖编辑器内部逻辑,不是 shell 层面的 touch 或 mkdir。
subl file.py 直接打开(不存在则新建缓冲区)
这是最常用也最容易踩坑的场景:你以为它新建了文件,其实只是开了个未保存的 tab。
- 执行
subl main.py,当前目录下没有main.py→ Sublime 打开一个标着main.py的空白标签页,右下角显示untitled,状态栏无磁盘图标 - 此时若直接关掉窗口且不保存,文件**永远不会生成**
- 只有你手动按
Cmd+S(macOS)或Ctrl+S(Windows/Linux)并确认路径,文件才真正写入磁盘 - 终端不会报错、不提示“文件已创建”,全程静默 —— 这是设计行为,不是 bug
subl 路径中含多级目录时不会自动创建父目录
比如执行 subl src/utils/helper.js,而 src/ 或 src/utils/ 根本不存在,Sublime 不会帮你 mkdir -p,而是直接打开一个叫 helper.js 的空白缓冲区,且保存时会弹出系统级“无法保存到该位置”的错误(macOS 显示“找不到文件”,Windows 显示“路径不存在”)。
- 必须提前确保父目录存在:
mkdir -p src/utils && subl src/utils/helper.js - 不能依赖
subl自动补全路径结构 —— 它只处理最后一级文件名 - 这个限制在脚本中尤其危险,比如 Git hook 里调用
subl .git/hooks/pre-commit,若.git/hooks/权限受限或被删过,就会卡在空白页
配合 -w 参数在脚本中安全“创建并编辑”
想让命令行流程可控(比如生成配置后立刻编辑),需要用 -w(wait)参数阻塞终端,等用户保存关闭后再继续。否则脚本会立即往下走,根本不知道文件是否真被写入。
- 正确做法:
touch config.json && subl -w config.json && echo "编辑完成,开始校验" - 如果跳过
touch直接subl -w config.json,用户关掉未保存的窗口,脚本仍会继续执行,config.json实际为空或不存在 -
-w在 macOS 上对文件夹无效(subl -w .不会等待),只对单个文件生效 - Linux/Windows 下若用 Wayland 或远程 SSH 启动 GUI,
-w可能失效或卡住,建议加超时判断
真正可靠的“创建+编辑”流程,永远要分两步:先用 touch/mkdir -p 确保路径可写,再用 subl -w 进入编辑。别指望 subl 自己解决文件系统层面的事。


















