通过WinSCP打开文件时VSCode标签栏显示(deleted)问题咨询
异常成因
该问题由WinSCP的临时缓存逻辑和VSCode的文件状态监测机制冲突导致:
WinSCP调用外部编辑器时,会先将服务器目标文件拉取到本地临时缓存目录,再唤起编辑器打开该缓存文件,后续通过监听缓存文件的修改事件触发回传服务器的操作。出现(deleted)标识的核心原因是VSCode读取缓存文件时,文件尚未完成写入/已失效:
- 双击打开文件的场景下,WinSCP未完成缓存文件的写入操作就提前唤起了VSCode,VSCode读取到不完整或尚未创建完成的文件,判定该文件已被删除,因此打上
(deleted)标记。此时VSCode会将修改内容写入自身的临时存储目录,不会触发WinSCP的上传同步逻辑 - 本地临时缓存目录存在之前使用残留的同名损坏缓存文件,VSCode读取到旧的失效缓存后,和当前WinSCP新拉取的文件路径校验不匹配,也会触发该标识
你观测到的右键手动打开无异常、删除临时目录后标识消失的现象,正好对应上述逻辑:右键点击「打开」时WinSCP已完成缓存写入,删除临时目录后旧的失效缓存被清空,VSCode都能读取到正常的缓存文件。
解决方案
方案一:调整WinSCP编辑器启动延迟(优先推荐)
- 打开WinSCP,进入「选项」-「选项」面板
- 依次进入「传输」-「编辑器」选项卡,选中你配置的VSCode编辑器条目,点击「编辑」
- 在弹出的配置窗口中,将「等待编辑器打开前的延迟(毫秒)」调整为500-1000,给WinSCP预留足够的缓存写入时间后再唤起VSCode
方案二:开启WinSCP缓存自动清理
在「编辑器」设置页勾选「关闭编辑器后删除临时文件」选项,避免旧缓存文件残留干扰后续文件的打开逻辑。
方案三:调整VSCode文件监听配置(临时治标)
如果需要快速解决问题,可在VSCode设置页搜索files.useExperimentalFileWatcher,关闭该实验性文件监听选项,可降低文件删除状态的误判概率。注意该方案可能影响其他本地文件的状态检测精度,仅推荐临时使用。
内容的提问来源于stack exchange,提问作者Rich John Beboso
相关产品推荐
相关产品推荐

