VSCode保存后未自动上传,大概率因uploadOnSave未设为true、.vscode/sftp.json未置于项目根目录、remotePath非绝对路径——三者任一不满足均导致静默失败。

vscode保存时自动上传到远程服务器的关键配置项
本地修改保存后没同步到服务器?大概率是 uploadOnSave 没设为 true,或者 SFTP 插件根本没配对。这个开关必须显式打开,否则 Ctrl+S 只会存本地。
-
uploadOnSave必须设为true,且写在项目根目录下的.vscode/sftp.json里(不是用户级配置) - 如果用了多个远程目标,确保当前打开的文件夹对应的是已配置的 SFTP 项目——VSCode 是按工作区识别配置的
-
remotePath要写绝对路径,比如/home/user/project,不能用~/project或相对路径,否则上传会失败或丢文件 - 注意
ignore列表:默认不忽略.git,但如果你加了"node_modules"却没加".vscode",可能把sftp.json本身也传上去了,导致远程配置被覆盖
SFTP 手动上传快捷键与命令面板触发方式
保存自动上传适合日常开发,但首次部署或批量更新时,得靠手动上传——这时候别依赖右键菜单,效率低还容易点错。
- 快捷键:没有默认绑定,需自己配。推荐在
keybindings.json中加一条:[{"key":"ctrl+alt+u","command":"sftp.uploadFile","when":"resourceScheme == 'file'"}] - 命令面板调用更可靠:Ctrl+Shift+P → 输入
SFTP: Upload(当前文件)或SFTP: Upload Project(整个项目) - 注意区分:
SFTP: Upload上传当前打开/选中的文件;SFTP: Upload Project上传整个工作区,但只传sftp.json里remotePath对应的映射路径,不是所有子文件夹 - 上传失败时,底部状态栏会显示红色错误,常见原因是权限不足或
remotePath目录不存在——SFTP 不会自动创建父目录
Remote-SSH 和 SFTP 同时启用时的冲突风险
两者都能“连远程”,但机制完全不同:Remote-SSH 是把 VSCode 前端连到远程后端进程,所有操作直读直写远程文件系统;SFTP 是本地编辑 + 主动上传。混用极易出问题。
- 不要在同一个工作区同时启用 Remote-SSH 连接和 SFTP 的
uploadOnSave——你 Ctrl+S 一次,可能触发两次写入(一次通过 SSH 写远端,一次通过 SFTP 再传一遍),导致文件内容错乱 - Remote-SSH 下无需 SFTP 插件:打开的文件天然就是远程的,保存即生效,
uploadOnSave完全无效,还会干扰状态栏的同步提示 - 判断当前模式:看左下角状态栏。有 “SSH: xxx” 表示走 Remote-SSH;只有 “SFTP” 图标或无标识但配置了 sftp.json,才是 SFTP 模式
- 切换前务必关闭所有远程终端和调试会话,否则 Remote-SSH 断开后残留进程可能卡住文件锁
keybindings.json 中如何安全绑定上传命令
直接改 keybindings.json 看似灵活,但容易因语法错误让整个快捷键系统失效——VSCode 不校验 JSON 格式,错一个逗号就静默失败。
- 优先用命令面板:Ctrl+Shift+P →
Preferences: Open Keyboard Shortcuts (JSON),它会自动校验并提示错误位置 - 绑定命令名必须准确:
sftp.uploadFile、sftp.uploadFolder、sftp.downloadFile,大小写和拼写错一个字母都不生效 -
when条件别漏:比如想只在编辑器有焦点时触发,加"when": "editorTextFocus";想在资源管理器里右键上传,得用"resourceScheme == 'file' - 避免覆盖全局快捷键:比如把
ctrl+s绑给上传,会导致无法保存本地文件——VSCode 不阻止这种配置,但后果自负


















