← Electerm 博客

SFTP 路径跟随终端:一个位置,两边同步看

2026-09-23
sftpssh终端文件管理提效技巧

SFTP 路径跟随终端:一个位置,两边同步看

你在终端里 cd /var/www/app/logs 去读日志,然后想在文件面板里拿同一个日志文件——于是把 varwwwapplogs 又点了一遍。反过来也一样:在 SFTP 里已经逛到了发布目录,回终端重启应用时又把那串路径敲了一遍。同一台机器的两个视图,路走了两遍。

electerm 的 SFTP 路径跟随终端就是省掉第二遍。打开之后,终端和 SFTP 面板共享同一个位置:shell 里 cd,文件面板跟过去;文件面板里点开文件夹,shell 跟过去。看一眼页眉上的动画——这就是该功能十秒钟的全部样子。

功能视频:Electerm SFTP Path Sync with Terminal

它到底做了什么

开启跟随后,两个窗格永远指向同一个远端目录:

  • 终端 → SFTP。 shell 工作目录一变,SFTP 面板就列出新文件夹。终端里 cd /var/www/app,地址栏自动改写成 /var/www/app,文件列表也换成新的内容。
  • SFTP → 终端。 在 SFTP 面板里双击(或回车进入)一个文件夹,终端会自动执行对应的 cd,下一个提示符就停在那个目录里。

这是双向同步,不是单向镜像。无论你在哪一边导航,另一边都会跟上——所以它最典型的姿势就是分屏:一边终端、一边 SFTP,连的是同一台主机。视频:Electerm Terminal and SFTP Split View

终端:  $ cd /var/www/app          SFTP:  /home/zxd  →  /var/www/app
                                              app.js  logs/  public/

SFTP:  双击 logs/                终端:  $ cd /var/www/app/logs
                                              app.log  error.log  access.log

在哪里打开

有两个开关,作用一样,只是范围不同:

  1. 单个会话——回形针图标。 终端窗格上方的会话控制条里,回形针图标就是该标签页的跟随开关。高亮表示正在跟随。日常就点它。
  2. 新建会话的默认值——终端设置。 设置 → 终端 → sftpPathFollowSsh。打开一次,以后每个新会话默认就是跟随状态。

如果开关没反应,先看最 obvious 的:跟随只在同一个连接的终端窗格和它自己的 SFTP 窗格之间同步。本地 shell、网页标签、RDP 会话,或者连着另一台主机的 SFTP 窗格,都没有东西可同步。

electerm 怎么知道 shell 在哪

这个功能难的不是搬文件面板,而是在不添乱的前提下知道 shell 的目录。electerm 用的是 OSC 633 转义序列的 shell 集成,和 VS Code 终端同一套标准:

  • OSC 633 ; A —— 提示符开始
  • OSC 633 ; B —— 命令输入开始
  • OSC 633 ; C —— 命令执行开始
  • OSC 633 ; D —— 命令结束
  • OSC 633 ; P ; Cwd= —— 当前工作目录

开启跟随后,electerm 只监听 Cwd= 上报。shell 自己宣布“我现在在 /var/www/app”——不用轮询,不往历史里塞 pwd,也不解析你的提示符。

这意味着:

  • 不注入命令。 回滚缓冲和 shell 历史里不会多出任何东西。
  • 不解析提示符。 自定义提示符、多行提示符、右侧提示符、PROMPT_COMMAND 的各种花活都不会把它搞糊涂,因为它根本不读提示符。
  • 怎么绕都准。 cdpushd、符号链接、一口气跳三个目录的部署脚本——shell 上报的是最终位置,而不是怎么走过去的。

想看技术细节:How Electerm Gets the Current Working Directory (pwd),实现在 src/client/components/terminal/shell.js

什么时候最爽

追日志。 cd 进日志目录,文件列表已经在那儿了,双击直接编辑或 tail。不用再走一遍目录。

发布后验证。 在 SFTP 里点进发布目录确认产物到了,终端已经在那儿等着你 systemctl restart app

逛一台不熟的机器。 在文件树里点来点去找方向,终端一路跟着,等找到有意思的目录,直接就能在里面跑命令。

ls 戒掉。 文件面板本身就是一个排好序、带大小、可点击的 ls。跟随一开,你不用再靠列目录来回忆里面有什么了。

限制和丑话

这是个试验性功能,有已知的毛病,项目本身也不藏着:Warning About SFTP Follow SSH Path Function。落到实处就是:

  • **Shell 只支持 bash、zsh、sh、ash 及同类。**能跑通 sh 风格集成脚本的才行。fish 和 Windows 终端系暂不支持——在那里跟随会悄无声息地什么都不做。
  • **终端一旦不对劲,先关跟随。**集成脚本跑在你的 shell 里面;在魔改过的环境(重度定制的 PROMPT_COMMANDprecmd 钩子、极简 BusyBox、网络设备 CLI)里,它可能干扰终端的正常表现。图标的 tooltip 直接链到警告 wiki 就是为这个。关掉永远是安全状态。
  • **SFTP 那边导航仍然要一次往返。**挪文件面板意味着用 SFTP 列一次远端目录。高延迟链路上,快速连 cd 几下会感觉面板慢半拍——那是网络,不是 bug。
  • **sudo -s / su / 容器会改变答案。**上报的是 shell 自己认为的目录。进了容器 mount 命名空间或 chroot,上报的路径 SFTP 子系统可能根本解析不了,面板就会拒绝跟随。这是合理的——别硬来。

排查清单

  1. 这个标签页的回形针图标高亮了吗?
  2. SFTP 窗格是同一个会话的分屏吗,而不是另一台主机?
  3. 远端 shell 是 bash/zsh/sh/ash 吗——不是 fish,也不是设备 CLI?
  4. 连接时 shell 有没有报错?集成脚本装不上时会喊得很大声。
  5. 还不行?把跟随开关关了再开,或重连这个标签页。如果开了跟随终端本身渲染就奇怪,那就先关着,跟进警告 wiki的更新。

一句话备忘

  • 开启 = 会话控制条里的回形针图标高亮;想默认开就去终端设置里打开 sftpPathFollowSsh
  • 终端 → SFTP:随便 cd,文件面板列出新文件夹。
  • SFTP → 终端:点开文件夹,shell 自动 cd 过去。
  • 原理:OSC 633 的 Cwd= 上报,不污染历史,不解析提示符。
  • **不好用?**先看 shell 类型(fish 不行)、是不是同主机的分屏,不行就关——关掉永远安全。

下一篇:终端与 SFTP 分屏——这个功能住的布局;目录对了、要搬东西了就看 SFTP 传文件和文件夹