再见 tmux?这位程序员用一套组合拳干掉了它!

大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构!

关注、发送C1即可获取JetBrains全家桶激活工具和码!

作为一个在 Linux 环境下工作的 Java 开发者,tmux 多年来一直是小D的“神器”:支持会话保持、窗口分割、多终端协作等功能,让远程开发变得游刃有余。然而,最近一套“轻量替代方案”让他重新思考:我们真的还需要 tmux 吗?

image

本文就带你深入了解这个令人震惊的结论,以及他是如何优雅地告别 tmux 的。


“我也曾深爱 tmux,但……”

对于很多开发者来说,tmux 是命令行工具的瑞士军刀。但随着项目变复杂、终端协议演进,小D也逐渐感受到 tmux 的“重量”——

“我曾用它超过 7 年,无论本地还是远程开发,都是必装工具。但最近,我开始动摇了。”

让他彻底陷入思考的是在 kitty 项目中读到的一条评论:

“终端复用器引入了不必要的复杂性,为了支持自己的会话/窗口概念,必须‘篡改’控制码。”

这话让人警觉:tmux 真的在背后偷偷改你的终端行为?


使用 tmux 的那些烦心事

使用时间越久,问题也越多见:

  • 颜色错乱:如果 TERM 设置不对,颜色渲染就会出错。
  • 滚动查看历史:必须学会 tmux 特有的滚动命令,新手劝退。
  • 复制粘贴混乱:鼠标选区经常被 split 打断。
  • 不支持新协议:像 kitty 图形协议 这样的新特性,tmux 完全跟不上。

作者 kovid(kitty 的作者)指出:

“tmux 拖慢了整个终端生态的发展。”

这不是杞人忧天:你可能发现终端 emulator 越来越强大,但一旦用了 tmux,很多高级功能就直接“废掉”。


那些替代 tmux 的小工具

image

最痛的痛点是什么?其实主要就两个:

  1. 会话保持(detach / attach)
  2. 窗口管理(窗口分组、分屏等)

会话保持的替代方案

传统的 nohupctrl-zdisown 能一定程度上实现后台运行,但它们的问题是:

  • 关闭终端就挂掉
  • 无法再次连接
  • 无日志回放

于是,小D找到了更专业的几款工具:

这些工具都遵循 UNIX 哲学:只做一件事,做到极致。它们不搞窗口分割,不篡改终端指令,只负责“会话保持”。

其中最满意的是 shpool,不仅支持 detach,还可以用快捷键快速脱离进程:

-- https://github.com/shell-pool/shpool/issues/71#issuecomment-2632396805
vim.keymap.set({ "n", "v", "i", "t" }, "<C-space><C-d>", function()
  vim.cmd("!shpool detach")
end)

这段配置可以直接绑定到 neovim,让你在任何模式下都能脱离当前终端进程。


那窗口管理怎么办?

本地当然可以靠桌面环境的窗口管理器(如 swayghostty)来操作多个终端。但远程开发时怎么办?

image

小D的开发方式是“客户端 + 远程服务器”:所有开发环境都在 Proxmox 上的虚拟机,日常通过 SSH 连接。

此时窗口管理还得结合 shpoolssh 来玩:

SSH 配置方案:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

Host = d.*
    HostName 192.168.88.xxx
    User erock
    IdentityFile ~/.ssh/id_ed25519
    RemoteCommand shpool attach -f %k
    RequestTTY yes
    ControlPath ~/.ssh/cm-%r@%h:%p
    ControlMaster auto
    ControlPersist 10m

意思是:你只需敲一条命令,就能自动 attach 到远程 shpool 的指定会话!

举几个例子:

ssh d.chat   # 连上 IRC 聊天会话
ssh d.dot    # 打开 dotfiles 的 neovim 实例
ssh d.term   # 普通终端操作会话
ssh d.pico   # 另一个 neovim 会话

再搭配 autossh,断线重连也不怕:

autossh -M 0 d.chat

你甚至可以在 WiFi 波动后自动恢复终端连接,开发体验堪比“云桌面”。


这套方案完爆 tmux 吗?

小D的答案是肯定的:

“我已经彻底弃用 tmux 了。现在 scrollback 原生支持、终端通知、标题同步都变得更好。”

当然也不是毫无缺点:

  • shpool 重连后不能正确恢复终端状态,导致 nvim 窗口大小异常

    vim.keymap.set("n", "<leader>l", function()
      io.stdout:write("027[?2048h")
    end, opts)
    
  • 不支持多人共享(“multiplayer”),意味着多个客户端可能互相断开连接。

不过这些问题大多数都有 workaround,远远没有 tmux 的复杂性那么“原罪”。


总结:tmux,不一定非你不可

如果你:

  • 不依赖复杂分屏
  • 重度远程开发
  • 偏爱 native scrollback 和终端特性支持

那么 shpool + ssh + autossh 的组合可能会是你的理想选择。

技术在发展,也许我们该放下对老工具的执念,拥抱更轻、更快、更现代的方案。


本文由博客一文多发平台 OpenWrite 发布!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容