sublime text 4 必须用 sftp-next(v3.16+),因旧插件依赖已移除的 urllib2,会报 importerror 并导致菜单消失;sftp-config.json 必须通过右键项目根目录“map to remote…”生成,且 upload_on_save 生效需同时满足:置于根层级、文件在映射路径内、服务器启用 sftp 并有写权限。

Sublime Text 本身不支持 FTP,所谓“一键同步”只能靠 SFTP 插件实现,且必须用 SFTP-Next(v3.16+)——其他叫 FTP/Sync 的插件在 ST4 下基本失效,连右键菜单都出不来。
为什么 FTPSync、sftp-client 等插件根本没法用
Sublime Text 4 彻底移除了 Python 2 支持,而 FTPSync、sftp-client 等旧插件依赖已删的 urllib2,一启动就报 ImportError: No module named urllib2,菜单直接消失。你搜到的“SFTP”插件如果作者不是 wbond,或者名字是小写 sftp,大概率是错的。
唯一能稳定触发 upload_on_save 的只有官方重写的 SFTP-Next(Package Control 里搜 SFTP,认准作者 wbond、大小写严格)。装完必须重启 Sublime,否则 Project 菜单里看不到 SFTP,右键也无响应。
sftp-config.json 必须由右键生成,手建=白写
插件只认「右键项目根目录 → SFTP: Map to Remote…」这一步生成的配置文件。手动新建一个 sftp-config.json,哪怕内容完全正确,也会被静默忽略。
- 先通过
Project → Add Folder to Project把本地项目加进侧边栏(确保它是顶层文件夹) - 右键这个文件夹图标本身(不是里面某个 .js 文件,也不是空白处)→
SFTP: Map to Remote… - 生成的文件名必须是全小写
sftp-config.json,不能是SFTP-config.json或sftp_config.json - 必须放在你右键的那个文件夹根目录下,不能在子目录里
upload_on_save 不生效?三个硬性前提缺一不可
upload_on_save 是个“条件触发器”,不是全局开关。光写 "upload_on_save": true 没用,以下三点必须同时满足:
-
upload_on_save必须写在sftp-config.json的根对象层级,不能嵌套进files或sync_down_on_open里 - 当前编辑的文件路径,必须落在
local_path(或项目根)下,且其相对路径能与remote_path对齐 —— 比如local_path是/src,remote_path是/var/www/html/,那你改/src/css/style.css才会传到/var/www/html/css/style.css - 服务器必须启用 SFTP(不是 FTP),且你的账号对
remote_path有写权限 —— 先在终端跑sftp user@host,确认能登录并cd进目标目录
常见失败现象和快速排查路径
上传失败时,状态栏没提示、控制台也没报错?大概率是配置没绑对位置或字段写错:
-
host填了sftp://example.com?删掉协议头,只留example.com或 IP -
remote_path写成www或./www?必须是绝对路径,以/开头,比如/var/www/html/ - 用了密钥但
password字段没删?留空字符串"password": ""也会导致认证失败 - 私钥文件权限不是
600?Linux/macOS 下执行chmod 600 ~/.ssh/id_rsa - 想看详细日志?在配置里加
"log_level": 2,然后按Ctrl+`打开控制台查看输出
真正麻烦的不是配置本身,而是所有条件必须严丝合缝:项目绑定、配置位置、字段大小写、路径拼接逻辑、SSH 认证方式——漏掉任意一个,upload_on_save 就只是个摆设。











