Sublime Text 远程开发本质是本地编辑+自动上传,成功需三者同时满足:项目已绑定、sftp-config.json由右键Map to Remote…自动生成于项目根目录、SSH认证链路通;缺一则静默失败。

Sublime Text 本身不支持远程开发,所谓“连接服务器”只是本地编辑 + 自动上传的模拟流程;能跑起来的关键不是插件装了没,而是项目已绑定、sftp-config.json 由右键自动生成、SSH 认证链路通这三者同时满足——缺一就会静默失败,不报错也不上传。
右键没出现 SFTP 菜单?先确认项目和文件夹是否被识别
插件只在「有显式项目」且「侧边栏显示可映射的文件夹」时才激活菜单。它不响应单个文件、空白区域、“打开文件夹”临时视图,也不认未添加进项目的目录。
- 必须通过 Project → Add Folder to Project 把本地目录加进项目,让它出现在侧边栏最顶层
- 右键对象只能是那个文件夹图标本身,不是里面某个
.js文件,也不是侧边栏空白处 - ST4(Build 41xx)用户必须装
SFTP-Next,装原版会直接报ImportError: No module named 'urllib3',菜单消失 - 装完插件后务必重启 Sublime Text,否则 Project 菜单里都看不到 SFTP 项,右键也无响应
sftp-config.json 放哪、字段怎么写才生效
这个文件不是全局配置,也不是手动创建就能用——插件只读取通过右键 Map to Remote… 在项目根目录自动生成的 sftp-config.json。名字、路径、字段错一个字符就静默失效。
- 文件名必须严格为
sftp-config.json(全小写、无空格、无额外后缀),不能是SFTP-config.json或sftp_config.json -
host填 IP 或域名,不要带ssh://;端口必须单独写port字段,别拼在host后面 - 用密钥登录时,
password字段必须完全删除(留空字符串"password": ""会导致插件仍走密码认证并失败) -
ssh_key_file(ST3)或private_key(ST4)必须写绝对路径:/home/you/.ssh/id_rsa或C:/Users/You/.ssh/id_rsa;Windows 反斜杠要双写C:\Users\You\.ssh\id_rsa或用正斜杠 -
remote_path必须以/开头,结尾建议也加/(如"/var/www/html/"),否则路径拼接会偏移
upload_on_save 设为 true 却没上传?检查三个隐性前提
upload_on_save 不是万能开关,它只在特定上下文里触发:项目已保存、路径匹配、配置层级正确。网络抖动时默认 3 秒超时还会静默失败。
-
"upload_on_save": true必须写在sftp-config.json的根对象层级,不能嵌套在files或sync_down_on_open下面 - 当前编辑的文件必须属于已映射的项目目录及其子目录;打开桌面一个
index.js,哪怕同目录有sftp-config.json,也不会上传 - 文件相对于项目根目录的路径,要能与
remote_path对齐。例如配了"remote_path": "/var/www/html/",你改的是src/js/app.js,那它会被传到/var/www/html/src/js/app.js - 网络慢或服务器响应延迟时,可在配置中加
"timeout": 10提高容错
sync_down_on_open 开启后打开文件没拉取远程变更?注意冲突处理逻辑
sync_down_on_open 是唯一能拉取远程变更的开关,但它只在打开文件那一刻触发一次,不是实时监听。而且它不自动覆盖——一旦本地有未保存修改,就会弹窗提示冲突。
- 启用方式:在
sftp-config.json中加入"sync_down_on_open": true - 如果本地已有未保存修改,打开文件时会弹出选择框,必须手动点 Use Remote 或 Use Local,不会默认覆盖
- 它不会对比文件内容差异,只比对 mtime;若远程文件被其他方式更新但时间戳没变,就拉不到新内容
- 没有锁机制,多人协作时无法避免覆盖风险,不能替代
rsync或 Git
真正卡住人的从来不是配置项本身,而是 Sublime 对“项目”的强依赖、SFTP 插件对 SSH 工具链的直调(不复用 ssh-agent)、以及所有路径/权限/字段错位都会导致静默失败——连错误日志都不打。调试时优先按 Ctrl+Shift+P 输入 SFTP: Show Console 看原始报错,比弹窗提示有用得多。


















