正确安装sftp插件须通过package control:先确保已装package control,再执行install package → 搜索wbond版sftp并安装,完成后必须重启sublime text;st4不支持该插件,需换用vs code等替代方案。

Sublime Text 本身不支持 SFTP,必须装 wbond 版 SFTP 插件才能上传远程文件;装错版本、没重启、配置文件名或路径不对,都会导致右键菜单不出现、上传无响应。
怎么正确安装 SFTP 插件(不是手动拖 zip)
Package Control 是唯一可靠渠道,手动解压插件包进 Packages 目录会失效——插件初始化逻辑和依赖不会加载,右键永远看不到 SFTP 菜单。
- 先确认已装 Package Control:按
Ctrl+Shift+P(Mac 用Cmd+Shift+P),输入Install Package Control回车;没反应说明已存在 - 再按
Ctrl+Shift+P→ 输入Package Control: Install Package回车 → 等列表加载完 → 搜SFTP→ 选作者是wbond的那个(别选sftp-client或FTPSync) - 安装完必须重启 Sublime Text,否则
Project菜单里没有SFTP,侧边栏右键也无响应 - 注意:SFTP 插件不支持 Sublime Text 4,如果你用的是 ST4,得换其他方案(如 VS Code + SFTP 扩展)
sftp-config.json 放哪、叫什么、哪些字段不能少
配置文件名必须是 sftp-config.json,且必须放在你通过 Project → Add Folder to Project 添加的项目根目录下——放错位置(比如用户目录、插件目录、或只是打开了单个文件没建项目),插件就静默忽略。
- 必填字段只有四个:
type(固定写"sftp")、host(服务器 IP 或域名,不要加ssh://)、user(SSH 用户名)、remote_path(服务器上绝对路径,以/开头,如/var/www/html/) -
password和private_key二选一:如果服务器禁了密码登录(PasswordAuthentication no),就不能填password,必须用private_key,且路径是绝对路径(Linux/macOS:/home/you/.ssh/id_rsa;Windows:C:/Users/You/.ssh/id_rsa或C:\Users\You\.ssh\id_rsa) -
remote_path末尾不加/可能导致文件上传到错误子目录;含中文或空格时,要确保服务器sshd_config设了AcceptEnv LANG LC_*并启用 UTF-8
为什么点了 Save 没上传?upload_on_save 不是万能开关
"upload_on_save": true 生效的前提是:当前文件属于一个已绑定 SFTP 配置的项目,且本地路径能被 remote_path 规则覆盖。它不是全局监听,也不会对任意打开的文件生效。
- 确认你不是只打开了单个文件——必须通过
Project → Add Folder to Project加载了整个本地目录,且sftp-config.json就在这个目录里 -
upload_on_save必须写在 JSON 根层级,不能嵌套在files或sync_down_on_open对象里 - 如果改了文件但没上传,按
Ctrl+Shift+P输入SFTP: Show Console查看真实错误——常见是Permission denied (publickey)(密钥权限不是 600)、Connection refused(host/port 不通)、或No such file(remote_path写错或目录无写权限) - 上传后远程文件权限变成
600导致网页打不开?加配置项:"default_permissions": "644"(文件)和"default_dir_permissions": "755"(目录)
编辑前先拉最新版,避免覆盖别人改的内容
SFTP 插件默认只做单向同步(本地 → 远程),没有任何锁机制或 diff 校验。多人协作时,你本地保存,可能直接覆盖掉别人刚上线的修改。
- 开启
"sync_down_on_open": true,每次双击打开文件前,自动从服务器下载最新版 - 加上
"confirm_overwrite_newer": true,当你本地文件比远程旧时,会弹窗提醒,而不是静默覆盖 - 别把
upload_on_save当部署手段——它不检查上传是否成功,也不回滚失败操作;生产环境建议用 rsync 或 CI/CD 流水线
最常被忽略的一点:所有配置都依赖 SSH 底层连通性。插件报错不明确,但根本原因往往就三个——网络不通、认证失败、路径权限不对。与其反复调 JSON 格式,不如先在终端跑一遍 ssh -i /path/to/key user@host -p 22 确认基础链路是否正常。











