ftpsync 不支持 upload_on_save,仅响应手动上传命令;配置文件必须为项目根目录下的全小写 ftpsync.json,且 passive 必须为 true,remote_path 须为绝对路径。

FTPSync 不支持保存即上传,只响应手动命令(如 Ctrl+Alt+U),配置文件名必须是全小写的 ftpsync.json 且严格置于项目根目录下——错一个字符、多一个点、放错位置,它就静默失效。
为什么改了 upload_on_save: true 却没反应
因为 FTPSync 根本不读这个字段。它从设计上就**没有 upload_on_save 机制**,所有“保存自动同步”的说法都混淆了它和 SFTP 插件。你在 ftpsync.json 里写 "upload_on_save": true,插件会完全忽略——既不报错,也不执行。
- 真正触发上传的只有手动命令:
FTPSync: Upload File(默认快捷键Ctrl+Alt+U)或右键菜单里的FTPSync → Upload - 如果需要自动同步,得换方案:SFTP 插件(支持
upload_on_save)、rsync + fswatch(Linux/macOS)、或 WinSCP 缓存编辑(Windows) - 别试图用 Sublime 的“保存后运行命令”功能绕过——FTPSync 没提供可调用的 API 命令,无法绑定到
on_post_save事件
ftpsync.json 配置必须满足的硬性条件
插件对配置文件极其挑剔,稍有偏差就拒绝工作,且不提示原因。
- 文件名必须是
ftpsync.json(全小写,无大小写变体,无后缀备份,无额外扩展名) - 必须放在你通过
Project → Add Folder to Project加入的**项目根目录下**,不是 Sublime 安装目录,也不是用户配置目录 - 必填字段只有
host、username、password_b64(或password)、remote_path;port默认为21,但若服务器用非标端口必须显式写出 - 密码含
@、/、:等特殊字符时,password字段容易解析失败,强烈建议改用password_b64:用echo -n "yourpass" | base64生成值再填入 -
passive必须设为true,否则多数现代 FTP 服务器(尤其带 NAT 或防火墙的)会连接超时或认证失败
上传失败时,第一眼该看哪里
界面弹窗报错(比如 530 Login authentication failed)只是表象,真正线索在 Sublime 控制台里。
- 按
Ctrl+`打开控制台,再执行一次上传(Ctrl+Alt+U),观察输出中是否出现ftpsync: connecting...、ftpsync: login failed或ftpsync: upload error: [Errno 111] Connection refused - 如果连
ftpsync:前缀都没出现,说明插件根本没加载——检查文件名、路径、是否重启过 Sublime(某些版本修改配置后需重启) - 如果卡在
connecting...后无响应,大概率是passive: false或端口被拦截;如果快速返回login failed,优先查username、password_b64和服务器是否允许 FTP 密码登录(有些仅开放 SFTP) - 注意:FTPSync 不支持 SFTP(SSH)协议,
type: "sftp"或port: 22是无效组合,它只走纯 FTP 或 FTPS(显式 TLS)
和 SFTP 插件最本质的区别在哪
不是功能多寡,而是**通信模型不同**:FTPSync 是“文件搬运工”,SFTP 是“远程文件系统映射”。
- FTPSync 每次上传都是独立 FTP 会话,不维护连接状态,不能实时监听远程变更,也无法做
sync_down_on_open - SFTP 插件基于 SSH,能复用连接、支持密钥认证、可设置
sync_down_on_open、ignore_regexes更灵活,且原生兼容upload_on_save - 如果你的服务器只开 FTP(非 SFTP),又坚持用 Sublime 内置同步,FTPSync 是少数可用选项;但只要服务器支持 SSH(几乎全部 Linux 主机都支持),SFTP 插件在稳定性、安全性和易用性上全面胜出
最容易被忽略的一点:FTPSync 的 remote_path 是**绝对路径**,且必须以 / 开头(如 "/var/www/html"),少一个斜杠或写成相对路径(如 "html")会导致上传到错误位置甚至失败;而它的日志里不会告诉你路径拼接结果,只能靠试错或抓包确认实际目标。











