根本原因是Sublime未将当前文件识别为已映射SFTP项目成员;必须通过右键项目根目录→SFTP→Map to Remote生成sftp-config.json,且upload_on_save需为布尔值true、置于配置根层级、文件路径须匹配remote_path映射范围。

为什么 upload_on_save 开了却没上传
根本原因不是插件坏了,而是 Sublime 没把当前文件“认作”已配置的 SFTP 项目成员。它只对 sftp-config.json 所在目录及其子目录下的文件生效,且必须满足两个隐性条件:upload_on_save 要写在配置根层级(不能缩进错层),且当前文件路径需能被 remote_path 映射覆盖。
- 检查你是否在项目根目录下右键 →
SFTP → Map to Remote生成了sftp-config.json;单个文件或未保存为项目的文件夹不会触发同步 - 确认
remote_path是服务器上的绝对路径(如/var/www/test/),而你编辑的文件本地路径必须落在该映射范围内(比如本地project/src/index.php对应服务器/var/www/test/src/index.php) - 若用的是 SSH 密钥,确保
ssh_key_file值是绝对路径(/home/user/.ssh/id_rsa),且权限为600(chmod 600 ~/.ssh/id_rsa) - 网络抖动或服务器响应慢时,默认 3 秒超时会静默失败,加一行
"timeout": 10到配置里可缓解
如何避免改完就覆盖别人正在调试的代码
团队共用测试环境时,upload_on_save 单向推送极易引发冲突。真正安全的做法是启用双向感知机制,而不是关闭同步。
- 务必设
"sync_down_on_open": true:每次打开文件前,SFTP 会先比对远程时间戳,若有更新则自动下载——你看到的永远是最新版 - 配合
"ignore_regexes"排除运行时生成物,例如:["\.log$", "cache/", "uploads/", "\.env$"],防止误传敏感或临时文件 - 不要依赖
sync_skip_deletes来“保护”远程文件;它只跳过删除操作,不阻止覆盖。真要防误操作,应在服务器端设只读权限(如chown -R deploy:www-data /var/www/test+chmod 755 /var/www/test) - 测试环境建议统一用
default_permissions控制上传权限,例如"default_permissions": "644",避免 PHP 文件传上去变成600导致 500 错误
修改后页面没刷新?检查这三处硬性限制
实时同步 ≠ 实时生效。SFTP 只管文件搬运,后续 Web 服务是否重载、缓存是否清空、OPcache 是否失效,全都不在它的职责范围。
- 确认 Web 服务器用户对
remote_path目录有读取权限(常见坑:www-data无法读/home/user/project) - PHP 项目若启用了 OPcache,改完文件后需手动执行
opcache_reset()或重启 PHP-FPM(sudo systemctl restart php8.5-fpm) - Nginx/Apache 若开了
sendfile on或启用了磁盘缓存,可能读到旧文件页;临时加add_header Last-Modified ""; add_header ETag "";强制绕过缓存验证
快捷键上传和右键菜单失效怎么办
菜单项消失或快捷键无响应,90% 是插件未正确加载或配置路径错位导致的。
- 先按
Ctrl+Shift+P→ 输入Package Control: List Packages,确认列表里有SFTP(注意大小写,不是sftp或sftp-client) - 右键没有
SFTP菜单项?说明当前视图未关联项目:菜单栏 →Project → Save Project As…保存一个.sublime-project,再重新打开文件夹 - 快捷键绑定失败?检查
Preferences → Key Bindings里是否和其他插件冲突(比如Ctrl+Alt+U被 Emmet 占用),换一组组合键更稳妥 - Sublime Text 4 用户注意:
SFTP插件需 3.9.0+ 版本才完全兼容,旧版可能缺失sync_down_on_open等字段支持


















