右键无sftp菜单是因为项目未正确绑定:必须通过project → add folder to project将本地目录加入项目并显示在侧边栏顶层,且需安装sftp-next(st4必需)、重启软件,并确保sftp-config.json严格位于项目根目录、全小写命名。

Sublime Text 本身不支持远程编辑,所有“直连服务器”能力都依赖 SFTP 插件,且必须走项目绑定 + sftp-config.json 驱动——没配置好项目结构,右键根本不会出现 SFTP 菜单。
为什么右键没有 SFTP 菜单?
不是插件没装,是 Sublime 没把当前文件夹识别为“可映射的远程项目”。常见断点:
- 没通过
Project → Add Folder to Project把本地目录加入项目(仅打开文件夹不算) - 该文件夹没出现在侧边栏最顶层(嵌套在其他文件夹里会导致插件忽略)
- 用的是 Sublime Text 4,但装了老版
SFTP(必须换SFTP-Next,否则启动就报ImportError: No module named 'urllib3') -
sftp-config.json是手动创建的,或放错位置(必须在项目根目录,且文件名大小写严格为sftp-config.json)
sftp-config.json 必须满足的硬性条件
这个文件不是“配对成功就能用”,而是插件运行时逐条校验的契约。任意一项不满足,upload_on_save 就静默失效:
-
remote_path必须以/开头(如"/home/user/project/"),结尾建议也加/,否则路径拼接会漏一级 -
ssh_key_file支持~展开(如"~/.ssh/id_rsa"),但不识别$HOME或环境变量 -
upload_on_save必须写在 JSON 根层级(不能包在"settings"或"sftp"对象里) - 同时写了
password和ssh_key_file?插件会优先用密码,私钥被忽略——删掉password字段才真正启用密钥认证
同步行为不可靠的三个典型场景
upload_on_save 看似自动,实则高度依赖上下文。以下情况它不会触发上传,也不会报错:
- 保存的文件路径不匹配
remote_path(比如你在/src/下改了utils.py,但remote_path是/app/,路径前缀对不上) - 文件刚被手动
Download过,但未修改就保存(插件认为“无变更”,跳过上传) - 网络超时后连接中断,后续保存操作静默失败——
connect_timeout建议设为20,太小易断,太大卡 UI
调试训练脚本时最关键的绕过点
你改完 trainer.py 保存,模型却仍报旧错?大概率不是没传上去,而是 Python 进程加载的是缓存字节码或旧模块引用:
- 别只依赖
upload_on_save,每次改完立刻在终端执行ssh user@host 'touch /path/to/trainer.py'强制刷新 mtime - 如果训练进程用了
importlib.reload(),确保 reload 的模块路径和远程文件路径一致(注意__file__指向是否被 symlink 干扰) -
sync_down_on_open必须开启,否则你打开的可能是本地残留副本,而非服务器最新版——尤其多人协作时,这比上传失败更隐蔽
真正的难点不在配置,而在于理解:SFTP 插件做的只是文件搬运,它不管 Python 解释器怎么加载、CUDA 上下文怎么保持、日志缓冲区是否 flush。所谓“实时编辑”,实时的只有磁盘写入;其余所有环节,都得你亲手掐住时序、验证状态、绕过缓存。











