中文 | English
SFTP+ 是 Tabby Terminal 的插件,为 SSH 终端标签页提供双栏 SFTP 文件管理功能,支持书签系统、路径记忆、拖拽上传下载、传输日志、文件冲突处理、权限编辑等,无需离开终端即可完成文件操作。
| 类别 | 功能 |
|---|---|
| 📂 双栏管理 | 左本地 + 右远程,可切换 水平/垂直/自适应/单栏 四种布局;分割线可拖拽调整,双击恢复默认 |
| 👁️ 查看 / 编辑 | 内置文本/图片查看器与文本编辑器(本地+远程);可额外指定可编辑扩展名,或允许编辑所有类型(二进制仍保护);图片支持同目录上一张/下一张导航;支持「复制」「复制选中」;文本查看器/编辑器支持右键复制、剪切、粘贴、全选;支持「以文本方式查看」和「在系统中打开/编辑」;大文本按行虚拟滚动(可流畅浏览接近上限的日志)、行号可开关、查看器光标形状三档(方块 / 竖线 / 下划线,与 Tabby 终端取值一致);远端文件被其它程序改动后再保存会先确认 |
| 🎨 文件图标 | 内置彩色 SVG 文件/文件夹图标;符号链接 / 快捷方式叠加角标;支持按扩展名自定义映射、自定义图标目录、禁用内置图标和替换文件夹图标 |
| 🔄 拖拽传输 | 跨栏拖拽即上传/下载,支持文件夹递归传输; 支持从系统资源管理器/桌面拖入到本地或远程面板 |
| ⬆️ 右键传输 | 本地面板右键上传、远程面板右键下载(多选批量) |
| ⚡ 高速传输 | 目录内多文件并行传输(并发数 1-10 可调);海量小文件走 tar 打包通道(本地打包→单文件传输→对端解包),大幅减少网络往返;传输通道模式五档可选(智能 / 仅 SFTP / 仅 TAR / 优先 SFTP / 优先 TAR);多选同一父目录下的多个条目可合并为一个归档一次传输;批量删除优先 SSH rm -rf / fs.rm(recursive) |
| 🔖 书签系统 | 全局书签(所有连接可见)+ 连接书签(仅当前 SSH 可见);可按范围分组或扁平混排,分组顺序可拖拽;可一键定位当前书签 |
| 📋 传输日志 | 记录所有操作历史,含「编辑加载/编辑保存」分类,支持筛选、统计、JSON 导出 |
| ⚡ 传输控制 | 进度条显示(含百分比)、暂停/继续/取消、断点续传、实时速度、预估剩余时间;非「仅 TAR」模式下打包失败自动回退常规逐文件传输;传输记录标注传输方式(⇄ SFTP / 📦 tar 打包 / 文件数);目标目录不存在时先预检(创建 / 用当前目录 / 取消);同一笔传输重复提交会被拦截并提示 |
| 文件冲突时弹出对比界面(显示上传⬆/下载⬇方向),支持覆盖/跳过/重命名,可批量操作;覆盖合并有独立进度面板;可计算两端内容摘要并在对话框展示,内容未变可自动跳过,内容不同时标 ≠ | |
| 🔐 权限编辑 | 远程文件 chmod — 3×3 勾选框 + 八进制预览;读不到权限或修改失败时明确提示,不再静默 |
| 📌 右键菜单 | 上传/下载、查看/编辑、新建/重命名/删除、复制/剪切/粘贴、刷新、全选/反选;文本查看器/编辑器提供文本专用右键菜单; 表头右键:列显隐/列宽调整/面板边框与斑马纹切换 |
| 🔍 过滤排序 | 关键词过滤、多列排序(点击列头)、可配置显示列;分组依据(不分组 / 名称 / 修改日期 / 类型 / 大小)把列表切分为可折叠分组,支持全展开·全收起,↑/↓ 可停在分组表头上、点击表头即整组选中;焦点在文件列表时键入文件名前缀即可跳转选中(资源管理器式,支持中文输入法) |
| 🧭 路径模式 | 三选一:off / remember(路径记忆)/ sync(与终端同步);可设默认值 |
| 🎨 主题系统 | 7 种预设 + 自定义配色,支持跟随 Tabby 系统主题 |
| ⌨️ 面板快捷键 | 可自定义面板开关快捷键,支持录制/清除/冲突提示;面板操作(删除/重命名/刷新/返回上级/后退/前进)、打开·查看·编辑与右键菜单常用动作均支持多键绑定,并可绑定鼠标侧键(Mouse3/Mouse4)、鼠标中键与滚轮上滚/下滚(可叠加 Ctrl/Alt/Shift/Win),并提供已占用快捷键清单 |
| 🌐 国际化 | 24 种语言(简中 / 英完整,其余缺失键回退英文),自动检测 Tabby/浏览器语言 |
| 📦 数据备份 | 导出/导入数据(书签 + 传输记录 + 设置 + 路径记忆);导出可按九类勾选(语言 / 主题 / 布局 / 对象图标 / 其它 / 传输设置 / 快捷键 / 书签数据 / 传输记录),未勾选的类别不写入文件,导入时自然不覆盖原有数据 |
| 🐞 意见反馈 | 设置页内置「报缺陷 / 提需求」入口,按界面语言路由到对应 Issue 模板,并自动预填 Tabby 版本、系统、前端类型与已装插件列表 |
![]() |
![]() |
|---|
| 区域 | 说明 |
|---|---|
| 标题栏 | 插件名称、当前 SSH 连接信息、布局切换、传输日志入口、最小化/关闭 |
| 左/右面板 | 各自独立浏览,支持路径输入、导航按钮、书签、过滤 |
| 文件列表 | 显示文件和目录,支持多列排序、列宽拖拽、列顺序调整 |
| 底部操作栏 | 显示选中项数量和总大小 |
| 传输队列 | 实时展示上传/下载进度、速度、剩余时间,支持暂停/继续/取消 |
| 书签弹窗 | 可按「连接书签」和「全局书签」分组,或扁平混排;支持拖拽排序和快速跳转 |
| 右键菜单 | 文件/表头右键弹出,提供完整文件操作和列配置入口 |
| 传输日志 | 历史记录弹窗,支持类型筛选、成功/失败过滤、JSON 导出 |
- 确保已安装 Tabby Terminal
- 在 Tabby 设置中配置插件目录
- 将构建产物放入插件目录(参见下方「开发」),重启 Tabby
- 打开任意 SSH 终端标签页,工具栏出现 SFTP+ 按钮即安装成功
- 打开 — 在 SSH 终端标签页的工具栏点击
SFTP+按钮 - 浏览 — 左侧本地文件系统、右侧远程 SFTP 目录,双击进入目录
- 传输 — 拖拽、右键上传/下载,或选中后使用右键菜单
- 查看/编辑 — 右键文本或图片文件可内置查看;文本可编辑并保存(远程文件自动上传)
| 操作 | 上限 |
|---|---|
| 文本查看 | 2 MB(内置查看器按行虚拟滚动,可流畅浏览接近上限的日志) |
| 图片查看 | 15 MB |
| 文本编辑 | 5 MB |
超出上限时仍会提示,并说明具体限制。
在 Tabby 设置页左侧找到「SFTP+」:
| 设置项 | 说明 |
|---|---|
| 语言 | 跟随系统 / 中文 / English |
| 主题 | 自动 / 深色 / 浅色 / 蓝 / 绿 / 紫 / 红 / 自定义 |
| 自定义颜色 | 独立设置主色、背景、文字、边框颜色 |
| 布局 | 自适应(按面板宽度自动切换)/ 水平 / 垂直 |
| 表格样式 | 显示边框、显示斑马纹 |
| 上传/下载并发数 | 目录内文件级并发数(1-10),即时生效 |
| 传输通道模式 | 文件夹传输的择路方式,五档:智能(按文件数与体积自动择路,默认)/ 仅 SFTP(永远逐文件,不做打包探测)/ 仅 TAR(永远打包,不可用时硬失败并说明原因)/ 优先 SFTP / 优先 TAR。旧「tar 打包加速」与「快速模式」开关会自动迁移到本项 |
| 默认上传/下载路径 | 分别设置上传目标目录和下载目标目录;留空时使用当前面板目录 |
| 默认路径模式 | 新连接首次打开面板时的路径模式(off / remember / sync) |
| 默认显示隐藏文件 | 新连接首次打开面板时是否显示隐藏文件 |
| 额外可编辑扩展名 | 在内置文本白名单之外,额外允许内置编辑器打开的扩展名(如 service, tf, plist);支持 .conf / *.conf / conf 写法 |
| 允许编辑所有文件类型 | 忽略扩展名白名单(默认关);二进制内容仍会拦截,避免用文本编辑器损坏文件 |
| 查看器与编辑器 | 行号显示开关(默认开);查看器光标形状三档(方块 / 竖线 / 下划线,取值与 Tabby 终端光标一致) |
| 文件图标 | 选择图标资源目录、配置扩展名映射、禁用内置图标和替换文件夹图标 |
| 工具栏自定义 | 拖拽排序工具栏按钮、隐藏不常用项 |
| 面板快捷键 | 自定义面板开关快捷键;面板操作(删除/重命名/刷新/返回上级/后退/前进)、打开·查看·编辑与右键菜单常用动作可绑定多个按键,也可绑定鼠标侧键(Mouse3/Mouse4)、鼠标中键与滚轮上滚/下滚,含已占用快捷键清单 |
| 数据备份 | 导出/导入数据(JSON),导出时可按九类勾选;清除全部数据(输入 DELETE 确认) |
| 意见反馈 | 报缺陷 / 提需求(自动预填 Tabby 版本、系统、前端类型与已装插件列表) |
| 兼容性 | 隐藏 Tabby 原生 SFTP 按钮避免冲突 |
所有数据(书签、传输日志、路径记忆、设置)可导出为 JSON 文件,也支持导入恢复。导出时可按类别勾选(语言、主题、布局、对象图标、其它、传输设置、快捷键、书签数据、传输记录),未勾选的类别不会写入文件——导入侧对不存在的字段是「不覆盖」语义,因此「只导外观」的备份不会清空书签或传输记录。
路径:设置页 → 数据备份 → 导出 / 导入
最新版本 v2.4.1(2026-10-01)— 完整更新日志
| 类别 | 技术 |
|---|---|
| 框架 | Angular 9 |
| 语言 | TypeScript 5.8 |
| 构建 | Webpack 5 |
| 样式 | 内联样式(CSS 变量自适应主题) |
| 平台依赖 | tabby-core / tabby-settings / tabby-terminal |
| 传输协议 | SFTP(复用 Tabby SSH Session) |
# 安装依赖
npm install
# 开发模式(watch 自动构建)
npm run watch
# 生产构建
npm run build构建产物 dist/index.js 即为 Tabby 插件包;dist/package.json 由 scripts/copy-sftp-manifest.mjs 在构建时从根 package.json 自动派生(改写入口、剔除开发期脚本),无需手工维护。
tabby-FTPS+/
├── docs/ # 架构与开发文档
├── scripts/ # 构建辅助(copy-sftp-manifest 自动生成 dist/package.json)
├── src/
│ ├── index.ts # 插件入口(Angular Module 注册)
│ ├── tabby-shims.d.ts # Tabby 类型声明
│ ├── services/ # sftp.service / bookmarks / i18n / transfer-log / config(Tabby 约定目录)
│ ├── settings/ # sftp-settings 设置组件(Tabby 约定目录)
│ ├── tabby/ # 终端集成:config/hotkey provider、terminal-decorator(工具栏注入按钮)
│ └── sftp/ # SFTP 功能模块
│ ├── sftp-floating-panel.component.ts # 主面板(业务编排)
│ ├── sftp-workspace-tab.component.ts # 工作区独立标签页容器
│ ├── components/ # 视图层(V):文件列表面板、对话框、右键菜单、冲突处理、传输队列等
│ ├── controllers/ # 控制器层(C):列 / 查看器 / 书签控制器
│ └── core/ # 逻辑/工具/类型:传输、冲突、摘要、拖放、剪贴板、路径等
├── locale/ # 24 语言 GNU gettext .po
├── tabby-plugin-common/ # 跨插件公共工具(theme / utils)
├── dist/ # 构建输出(index.js + package.json,不入库)
├── package.json
└── webpack.config.js
更完整的目录说明见 docs/DEVELOPMENT.md。
欢迎为 SFTP+ 贡献代码或建议!本插件功能想法由作者(DD1024z)提供,主要实现代码使用 AI 辅助生成。
- 提交 Bug 或功能请求:GitHub Issues 📝
- 贡献代码:Fork 项目并提交 Pull Request 🚀
- 喜欢 SFTP+?可以帮忙点个 ⭐ Star 支持一下!
您的点赞与 Star 是我持续开发的动力,感谢支持!❤️
SFTP+ 的成长离不开基石项目与社区用户的支持,在此特别感谢:
- Tabby — 强大的跨平台终端,SFTP+ 得以在其生态内运行
- SFTP(SSH File Transfer Protocol) — 底层文件传输协议,本插件的远程文件管理能力构建于此之上
- Tabby SFTP-UI — 早期双栏 SFTP 文件管理器,其交互与实现思路为 SFTP+ 提供了重要参考,部分功能设计受其启发
- @fweiger — Issue #13 提交了详尽的使用体验优化建议(单击/双击交互、右键菜单排序、快捷键聚焦等),多项已落地 v2.0.2
- @HarpyWar — Issue #3 反馈热键设置页异常,已修复
- @xingkongxiademodeng — Issue #10 指出目录上传串行无并发的性能瓶颈,为并发传输优化提供方向
- @Hanzo-Huang — Issue #5 提出「获取当前工作目录」功能建议,已实现
- @Purgepyro — PR #18 新增自定义可编辑扩展名、允许编辑全部类型,并修复手动安装后内置图标空白
- @waylandun — Issue #21 反馈编辑器粘贴会进终端,PR #22 在面板根隔离文本按键(macOS 实测)
- 同时感谢 @webbrain-one、@JayceVane 提交 Pull Request 的贡献尝试
SFTP+ 遵循 MIT 开源协议。欢迎使用、修改和分享,但请遵守协议条款。
SFTP+ 是一个免费的开源项目,主要使用 AI 辅助生成,难免存在一些 BUG 缺陷,作者无法保证功能代码验证到位。使用本插件即表示你同意承担相关风险,开发者不对因使用插件导致的任何问题或损失负责,请酌情使用。

