必须同时启用VSCode的files.autoSave和SFTP插件的uploadOnSave(默认false),二者缺一不可;uploadOnSave失效常见原因包括ignore规则写错(仅支持glob非正则)、私钥权限非600、.vsix重命名导致ID校验失败。

为什么开了 files.autoSave 还是不同步?
因为同步不是 VSCode 自带能力,而是靠 SFTP 插件这类第三方工具实现的。VSCode 的 files.autoSave 只负责把文件写进本地磁盘;它不会、也不能自动推到远程服务器。你必须同时启用 SFTP 插件的 uploadOnSave 开关,且该字段默认为 false,不手动改就永远不上传。
常见错误现象:files.autoSave 设成了 "onFocusChange",切到终端后远程文件没变——问题不在 VSCode,而在 SFTP 配置漏了 "uploadOnSave": true。
-
uploadOnSave和files.autoSave是两个独立开关,缺一不可 - 若用
afterDelay模式,files.autoSaveDelay建议 ≤1000(1 秒),否则可能刚改完还没来得及上传,就被另一次编辑中断 - SFTP 上传失败时 VSCode 不弹错误框,只在右下角闪一下
Upload failed,极易忽略
sftp.json 里 ignore 写错会拖慢同步
ignore 字段看着像支持正则,实际只认 glob 语法(minimatch)。写错不仅无效,还会让本该跳过的文件全传上去,比如日志、node_modules、临时编译产物,直接撑爆远程磁盘或卡死连接。
典型误写:"**/*.log$"(带 $)、"logs/[0-9]{4}-[0-9]{2}"(用正则语法)——这些会被当字面字符串处理,结果什么也不忽略。
- 正确写法示例:
"**/*.log"、"**/logs/**"、"**/node_modules/**" -
**表示递归匹配任意层级,*只匹配当前层单个目录或文件名 - 想排除某类文件但不确定路径深度,优先用
**/xxx,而不是xxx(后者只排除根目录下的同名项)
私钥权限不对会导致 SFTP 同步卡在 Connecting...
同步失败时别只盯着 SFTP 日志看。如果连接一直卡在 Connecting... 或报 Permission denied (publickey),90% 是 privateKeyPath 指向的私钥文件权限太松。Linux/macOS 下,私钥文件权限必须是 600(即仅所有者可读写),否则 OpenSSH 会直接拒绝加载。
- 修复命令:
chmod 600 /path/to/your/private.key - Windows 用户注意:WSL 中的私钥也要检查权限,不能只看 Windows 层面的属性
- VSCode 不校验私钥权限,错误由底层 SSH 库抛出,状态栏提示极简,容易误判为网络问题
离线安装插件时重命名 .vsix 会破坏 ID 校验
企业或内网环境离线部署插件,下载完别手贱改 .vsix 文件名。VSCode 安装时会从包内 package.json 读取 publisher 和 name 字段生成唯一插件 ID。你把 ms-python.python-2024.10.1.vsix 改成 py.vsix,ID 校验就通不过,轻则提示“已存在同名插件”,重则静默失败。
- 多个版本共存时,VSCode 依赖文件名里的版本号做覆盖判断;重命名后它无法识别新旧关系,可能保留旧版、跳过新版
- 批量安装推荐用命令:
code --install-extension /path/to/ms-python.python-2024.10.1.vsix - 路径中避免空格和中文,尤其 Windows 下容易因引号转义出错
真正影响同步速度的,往往不是网络带宽,而是配置细节:私钥权限、ignore 规则、插件 ID 校验、甚至文件名里的版本号。这些点不显眼,但每漏一个,都可能让“保存即同步”变成“保存即等待”。


















