如何在不使用终端多路复用器的情况下实现(本地/远程)session 的持久化?

kitty 的作者曾经多次明确反对 tmux/zellij 这样的终端多路复用器,Ghostty 的作者似乎也曾表达过反对。

GitHub - shell-pool/shpool: Think tmux, then aim... lower · GitHub 看看这个?

emacs --bg-daemon

后续所有操作都是 emacs 的 eshell 或者 vterm 里面完成。

试试这个?

这个问题是这样的。kitty 作者不支持 tmux 的原因是因为 tmux/zellij 本质上就是一个终端里面的终端,这样的一层嵌套会带来许多兼容性的问题,尤其是所有运行在 tmux 里的终端 app 能否使用到 kitty 开发的先进功能都取决于 tmux/zellij 能不能支持。对于 kitty 作者这样一位大力推进了许多终端先进协议 (kitty image protocol, kitty keyboard protocol 等)的人来说,tmux 等终端复用器的存在某种意义上是有让他开发的这些先进功能的努力白做工。同理,vterm/eat 之类的 emacs 里的终端模拟器或者用 neovim 内嵌的 vterm 和 tmux/zellij 这些都是一样的,都是嵌套的终端,都不能享受到 kitty 终端的先进特性,都不是属于 kitty 作者推荐的使用方式。当然了,虽然 kitty 的作者的意见很大,但是实际体验下来 tmux 的体验其实够用了,kitty image protocol 是支持的,keyboard protocol 虽然不支持,但是终端里能用的快捷键其实够用了,并不缺那几个按键使用。

所以如果你使用的终端 app 本身支持 client-server 模式比如 neovim emacs opencode 等,那就直接使用它们自己的 client 来进行 attach detach,这样不用多一层 tmux,也能享受到先进特性。对于非交互式的 CLI 命令,说实话也用不到这些先进终端的功能,别说 tmux 了,就是 nohup 都能用。当然用 tmux 肯定是最方便的,所以这种情况该用 tmux 就照用,没什么大不了的。或者就是用 wezterm 自带的 multiplexing 功能 但是需要在远端也安装 wezterm

3 个赞

终端模拟器级别的 session 持久化目前只有 WezTerm 在做么?好像没听说过 kitty 和 Ghostty 有这个功能。