必须将本地目录通过project→add folder to project添加至侧边栏顶层,右键该文件夹图标才出现map to remote…选项生成sftp-config.json;配置需严格遵循大小写、路径格式、密钥与密码互斥、权限设置等四条铁律;upload_on_save生效需满足项目已保存、文件路径匹配remote_path等四个条件;sftp与rsub机制冲突,不可混用。

右键没有SFTP菜单?项目没加进侧边栏顶层
Sublime Text 不会自动识别你“想连服务器”,它只对明确加入项目的本地文件夹响应 SFTP 操作。右键没菜单,不是插件坏了,是 Sublime 根本没把当前上下文当“可映射对象”。
必须手动执行 Project → Add Folder to Project,把你要同步的本地目录加进去;而且这个文件夹图标得出现在侧边栏最顶层——不能是子文件夹,也不能是空白处右键,更不能是对某个 .js 文件右键。
只有这时,右键该文件夹图标,才会出现 Map to Remote… 选项,点击后插件才生成 sftp-config.json。别手动生成这个文件,它只认“右键触发”的路径上下文。
sftp-config.json 配置四条铁律
这个 JSON 文件名大小写敏感、位置固定、字段语义严格,错一条就连接失败或上传静默失效:
-
sftp-config.json必须小写,不能是SFTP-config.json或sftp_config.json -
remote_path必须以/开头(如"/var/www/html/"),结尾也建议加/,否则路径拼接会偏移 -
ssh_key_file支持~展开(如"~/.ssh/id_rsa"),但不识别$HOME或其他环境变量 - 不能同时写
password和ssh_key_file,SSH 层直接拒绝,错误只显示Authentication failed,无具体提示
upload_on_save 不生效?检查这四个隐性条件
开了开关 ≠ 自动上传。它依赖一组运行时上下文,缺一不可:
-
upload_on_save必须放在 JSON 根层级,不能嵌在files或sync_down_on_open下面 - 当前编辑的文件必须属于已保存的项目(即存在
.sublime-project文件) - 该文件路径必须能被
remote_path规则覆盖(比如配了"/var/www/html/",你在/src/index.js编辑就不会上传) - 默认超时 3 秒太短,网络抖动时静默失败;加
"timeout": 10提高容错
另外,上传后远程权限常变成 600,Web 服务读不了,得显式加 "default_permissions": "644"。
SFTP 和 rsub 完全不能混用
RemoteSublime(rsub)和 SFTP 插件底层机制完全不同:前者靠 SSH 反向端口转发,保存直接写回远程磁盘;后者是先存本地再上传。两者共存会导致覆盖冲突。
你在 sftp-config.json 里写的 "upload_on_save": true 对 rsub 打开的文件完全无效——它根本不走 SFTP 的钩子。
常见踩坑点:rsub 编辑时又启用了 sync_up_on_save,结果刚保存完就被 SFTP 覆盖掉。一个项目里只能选一种路径,切勿并行。











