sftp插件通过监听save事件实现保存即上传,需正确安装、配置sftp-config.json并启用"upload_on_save":true;常见失败原因包括host格式错误、ssh密钥未配置、remote_path目录不存在或无写权限、ignore_regexes误过滤文件等。

用 SFTP 插件实现保存即上传
Sublime Text 原生不支持 FTP/SFTP 自动上传,必须依赖 SFTP 插件。它不是“后台同步服务”,而是监听本地 save 事件后,立即执行一次上传——所以你按 Ctrl+S 或触发 save_on_focus_lost,文件才会发到服务器。
安装和配置的关键点:
- 必须通过
Package Control: Install Package安装SFTP(不是FTPSync或其他名字相近的插件) - 配置文件路径是
sftp-config.json,且必须放在项目根目录或Packages/User/下对应位置,不能随便命名或放错层级 -
"upload_on_save": true是开关,缺了这行就不会上传;设为false或漏写引号都会静默失效 - 如果项目含中文路径或空格,
remote_path建议用正斜杠/,避免 Windows 风格反斜杠\导致路径解析失败
为什么改了文件却没上传?常见卡点
上传失败往往不是插件问题,而是连接或权限链路上某个环节断了。最常踩的坑集中在以下几处:
-
host写成http://xxx.com或带端口如xxx.com:22—— 正确写法只是"host": "xxx.com",端口走单独的"port": 22字段 -
user和password明文写在配置里,但服务器实际用的是 SSH 密钥登录;此时应删掉password,加上"private_key": "/path/to/id_rsa" -
remote_path指向的目录在服务器上不存在,或当前用户无写权限;上传会静默失败,需打开Tools → SFTP → Show Output查看具体报错,比如Permission denied (publickey)或No such file - 配置里写了
"ignore_regexes"却误加了.js或.html,结果连主文件都被过滤掉,上传列表为空
save_on_focus_lost 和 upload_on_save 能一起用吗?
能,而且推荐一起用。因为 save_on_focus_lost 是原生保存机制,它确保你切出窗口时文件已落盘;而 upload_on_save 是 SFTP 插件对「保存完成」事件的响应——只要文件真实写入磁盘,上传就会触发。
但要注意两个前提:
-
save_on_focus_lost必须设为true,否则手动不按Ctrl+S就不会触发上传 - 不要同时启用
AutoSave插件的auto_save_on_idle,否则可能在你打字中途就上传未完成的草稿,尤其对模板文件或正在重写的 JS 逻辑很危险 - 大文件(>5MB)上传期间 UI 会卡顿,建议在
ignore_regexes中排除日志、打包产物等非源码文件,例如"*.log", "*.min.js"
上传失败时怎么快速验证和回退?
别直接改配置硬试。先做三步最小验证:
- 右键当前文件 →
SFTP: Upload File,看是否弹出成功提示;失败则说明连接或路径问题,跟自动逻辑无关 - 临时把
"upload_on_save": false改成true,再保存一次,确认是配置加载问题还是运行时问题 - 在终端手动跑一遍
sftp -o Port=22 user@host,验证基础 SSH 连通性和权限,绕过插件层
真正麻烦的是混合使用 Git 和 SFTP 的场景:你 push 了代码,但服务器上文件还是旧的——这时候大概率是 remote_path 指向了错误的部署目录,或者你忘了 upload_on_save 只作用于当前打开的文件,不会递归同步整个项目。











