sublime text 4 中 sftp 插件需满足项目已加载、侧边栏含可映射文件夹、正确安装 wbond 版并重启才能显示右键菜单;连接失败多因 ssh 握手问题,须用绝对密钥路径、600 权限、启用 pubkeyauthentication;上传依赖路径匹配与 upload_on_save 开关位置,权限错乱需设 default_permissions;无锁机制,不可替代 rsync 或 git。

Sublime Text 原生不支持 SFTP 远程同步,所有“自动上传”功能都依赖第三方插件,而目前唯一能稳定跑在 Sublime Text 4 上的只有 SFTP(wbond 版),但它不是 FTP 客户端,而是基于本地 SSH 工具链封装的同步代理——这意味着它会调用系统 ssh 和 sftp 命令,而不是自己实现协议栈。
为什么 SFTP 插件右键菜单不出现
这不是安装失败,而是触发条件没满足。插件只在「已加载项目」且「侧边栏有可映射的文件夹」时才激活菜单项。
- 必须通过 Project → Add Folder to Project 或 Project → Save Project As… 显式建立项目,不能只打开单个文件
- 右键目标必须是侧边栏中显示的文件夹(不是空白处、不是标签页、不是未保存的 untitled 文件)
- 安装后必须重启 Sublime Text —— Package Control 不会热加载 GUI 菜单项
- 确认安装的是作者为
wbond的SFTP,不是sftp-client或FTPSync等仿制品
sftp-config.json 配置写对了却连不上
绝大多数连接失败和配置语法无关,而是 SSH 底层握手被拒。插件不会复用你终端里已登录的 ssh-agent,它每次都是全新调用 ssh 命令。
-
host填内网 IP(如192.168.1.100)但你在公网访问?换公网 IP 或域名,并确认服务器防火墙放行对应端口 -
private_key路径写相对路径(如~/.ssh/id_rsa)?必须写绝对路径,Linux/macOS 用/home/you/.ssh/id_rsa,Windows 用C:/Users/You/.ssh/id_rsa - 密钥权限不是
600?Linux/macOS 下执行chmod 600 ~/.ssh/id_rsa,否则 OpenSSH 直接拒绝读取 - 服务器
/etc/ssh/sshd_config关了密钥登录?检查PubkeyAuthentication yes是否启用 - 同时写了
password和private_key字段?二者互斥,删掉password字段
upload_on_save 设为 true 却没上传
这个开关只是“触发器”,真正决定是否上传的是路径匹配逻辑和项目上下文。
-
upload_on_save必须写在sftp-config.json的根对象层级,不能嵌套在files或sync_down_on_open下面 - 当前编辑的文件路径必须落在
local_path(或项目根目录)下,且其相对于该路径的子路径要能与remote_path对齐。例如:local_path是/src,remote_path是/var/www/html,那你改/src/js/app.js才会传到/var/www/html/js/app.js - 没保存过
.sublime-project文件?SFTP 插件只认「带 project 文件的项目」,不认「临时打开的文件夹」 - 网络超时默认 3 秒,服务器响应慢就静默失败。加
"timeout": 10提高容忍度 - 想调试?按
Ctrl+Shift+P输入SFTP: Show Console,所有底层sftp命令和错误都会实时打印出来
上传后远程文件权限错乱(比如变成 600 导致网页打不开)
SFTP 插件上传文件时默认继承本地 umask,不设法覆盖就会让 PHP/HTML 文件变成不可读(web server 拒绝服务)。
- 在
sftp-config.json中显式加"default_permissions": "644"(文件)和"default_dir_permissions": "755"(目录) - 别依赖
ignore_regexes来跳过.git或node_modules—— 如果它们出现在local_path下但没被忽略,插件仍会尝试上传,可能因权限或大小卡死 - 上传失败不会回滚,也不会提示;开启
"confirm_sync": true可在每次上传前弹窗确认 - 多人协作场景下,
sync_down_on_open是必要选项,否则你打开一个已被同事改过的文件,保存时直接覆盖对方修改
最常被忽略的一点:SFTP 插件没有锁机制,也不做内容比对。它只管“把本地文件扔过去”,哪怕远程文件刚被 curl 改过、被脚本重写过、甚至被 rm -rf 过,它都不会预警。真要可靠同步,得靠 rsync --checksum 或 Git 工作流,而不是编辑器插件。











