sftp-next(v3.16+)是sublime text 4(≥4.4107)唯一稳定支持upload_on_save的插件;ftpsync等不监听保存事件,旧插件因urllib2移除而无法加载。

Sublime Text 本身不支持保存即同步 FTP/SFTP,所谓“自动上传”完全依赖插件,而目前唯一能在 Sublime Text 4(≥4.4107)上稳定触发 upload_on_save 的,只有 SFTP-Next(v3.16+)。其他名字带 FTP/Sync 的插件,要么一启动就报 ImportError: No module named urllib2,要么压根不监听保存事件。
为什么 FTPSync、sftp3 等插件 upload_on_save 不生效
FTPSync 设计上就只响应手动命令(比如右键 → Upload Current File 或快捷键 ctrl+alt+u),它根本不注册 on_post_save_async 事件;sftp3 是旧分支,ST4 下常静默失败或 TLS 握手卡死;所有基于 Python 2 的插件(包括老版 SFTP、SublimeSimpleSync)在 ST4 中因 urllib2 被彻底移除而无法加载——控制台里会直接刷出导入错误,菜单项都不出现。
你看到的“已安装”,很可能只是 Package Control 列表里有个名字,实际插件进程没跑起来。
sftp-config.json 必须填对的几个硬性字段
右键项目文件夹 → SFTP: Setup Server 生成的配置,以下字段写错会导致“没报错但文件没传过去”:
-
"host":只填域名或 IP,如"example.com"或"192.168.1.100",不能加 sftp:// 或 ftp:// -
"remote_path":必须是绝对路径,以/开头,如"/var/www/html";写成"www"或"./www"会传到用户 home 目录下 -
"ssh_key_file":推荐用密钥,填"~/.ssh/id_rsa"即可,不用展开成完整路径;但注意 Linux/macOS 下权限必须是600,否则 OpenSSH 拒绝读取 -
"upload_on_save":必须为true,且必须写在 JSON 根对象层级,不能嵌套在files或sync_down_on_open下面
upload_on_save 生效的三个前提缺一不可
光配对字段还不够,以下三点全满足才能真正触发上传:
- 必须通过
Package Control: Install Package安装SFTP-Next,手动丢.sublime-package文件到Packages/会静默退出 - Sublime Text 版本 ≥
4.4107;低版本在 TLS 握手阶段可能抛ssl.SSLError - 服务器必须启用 SFTP(不是 FTP),且你的账号对
remote_path有写权限——先在终端执行sftp user@host,确认能登录并cd进目标目录
另外两个实用配置建议加上:"save_before_upload": true(避免 Ctrl+S 前忘了保存),"save_on_focus_lost": true(切走窗口就同步,需加到 Preferences: Settings - User 中)。
上传失败时去哪查错误
SFTP-Next 有图形化输出面板(Tools → SFTP → Show Output),但 FTPSync 没这个功能,错误全藏在 Sublime 控制台里。按 Ctrl+`(反引号)调出控制台,上传失败时通常能看到类似 ftpsync: error: 530 或 Connection timed out 的原始响应。如果控制台空空如也,大概率是插件根本没加载成功,而不是连接问题。
别指望“实时同步”真能双向、带锁、防覆盖——它只是单次、单向、无校验的搬运。改完模板随手 Ctrl+S,线上配置就没了;中文文件名没设 UTF-8 编码,服务器上就是乱码;大文件上传卡 UI,也不会自动分块或断点续传。这些边界,得自己心里有数。











