感觉tmux在外面相当火,似乎大多数人都在用tmux。但咱们这里宁可多开几个ssh
想问一下tmux到底有没有什么特别的优势?
Emacs Client (daemon) 是 Tmux 的上位替代。
Tmux 优点: 稳定。
Tmux 缺点: 功能少(相比 Emacs),需要配置单独的快捷键,应用之间的交互比较弱。
Emacs Client 缺点:如果你经常需要重启你的 Emacs 的话,用来做终端复用就不太合适。
Emacs Client 优点:它是 Emacs。
对分屏没需求,坑太多了, esc delay,颜色,复制粘贴,按键冲突等等,如果不是天天用的话基本每过一段时间都要重学按键,而且远程的话直接用 tramp 只是偶尔用 ssh
我用 tmux
tmux 不是只用来分屏的。。。ssh 连接断掉后 tmux session 都能活着,甚至可以从远端直接操纵某个 tmux session。「多开几个ssh」根本无法实现这个能力,想让程序持续运行就得用 nohup,比 tmux 差远了。
远端开个 emacs daemon 一样的效果
最大的好处就是ssh断了连回去就行,程序持续运行。screen也差不多。 不过要是本地用这玩意并不好用,还是键鼠协同操作比较舒服
tmux 有利有弊。
tmux 其实就是个终端下的窗口管理器,当然大多数人都是因为可以在远端主机上开着tmux server,让tmux帮你维持pty会话。
缺点就是tmux限制了一部分现代终端的特性,因为你在tmux里,terminfo就是用的tmux支持的那几个,而且还有一个就是按键序列要转换两次,一次在tmux,一次在你自己的终端模拟器。我在github issue就看到kitty的作者tmux那边争吵过,kitty也建议不要用tmux并觉得tmux是个不好的东西。其实现代一些的终端模拟器比如wezterm和kitty也可以实现multiplex,不一定需要tmux。
tmux简单优雅稳定而且不管你用什么终端模拟器都能用,其实tmux挺好。
esc delay 是因为如果远程连接就会有延时,如果这个值太小的话转义序列就会有问题,如果你本地用设置成0就好了;颜色已经支持真彩色了只要你的终端模拟器支持;复制粘贴其实很好用,按键冲突重新映射下prefix key,按键不熟可以<prefix-key>?
我用。而且是高度依赖。我在本地都用,为了保持和远程的操作习惯一致。
一,是为了在远程保留会话,和分屏。 二,我把它作为emacs的多个tab来用。虽然emacs本身也有tab,但是它在tab内不能保存布局。tmux可以保存布局。
kitty这种term客户端虽然可以multiplex,但是它不能保存会话吧?这有啥可和tmux争的,完全是无理取闹。
我觉得对term客户端来说,如果不能很好的支持tmux,可以算是次品。
复制粘贴只要终端模拟器支持那个什么协议的。可以无缝衔接。
emacs 还是以 gui 为主的。tmux 本身就是配合终端程序用的,和 gui 不搭干。 至于外面世界很火,tmux 也不怎么火吧?现在最火的远程开发方式应该是用 vscode 直接连 ssh 开发。tmux 主要比较适配 vim 的工作流。
很多人遇到的 tmux 快捷键有问题和显示颜色的问题,那通常都是配置不对,或者自己用的终端模拟器本身就不够现代。正常终端能支持的快捷键和真彩显示,tmux 都能支持。哪怕是 Extended keys (CSI u) 协议 tmux 也是支持的。
此外,还有一个 multiplex 叫 zellij,这个目前支持了 sixel,比较有意思,tmux 目前来看在相当长的时间内应该不会实现这个协议了。不过 zellij 的默认快捷键的 schema 非常难用,全是打架,熟悉用终端快捷键的人用过应该都觉得忍不了它的默认快捷键。。。不知道是怎么设计出来的。。。
从窗口管理器的角度来说,有用。另外,wezterm可以在远端开daemon替代tmux没问题。没有不能很好支持tmux的终端模拟器的说法,tmux也只是一个面向终端的软件没有什么支持不支持的说法,你可能理解错了。简单的说,现代的终端模拟器实现的一些高级的capacity, tmux并没有实现,比如kitty terminal graphics protocol。所以不管你终端模拟器多么高级,你用tmux,这些东西你都用不了
如果有远端daemon的那可以和tmux争一争。
tmux 对于远程开发是神器,完全不担心ssh断掉。关机回家,第二天直接恢复现场继续
我也用tmux,但平时是wm.除了远程服务器上比较需要,平时也没有太多应用场景。
zellij 或许是 替代 tmux 的 未来工具,用rust 实现的,功能强大,我已经用了大半年了
能不能先问问是不是没人用?
我用 tmux 的三点原因:
我终端用的 vterm,vterm 使用了 C-s 来实现 copy-mode。而我为了用 C-s 来搜索(保持 emacs 习惯),把这个功能禁掉了,便套了层 tmux 复制;
Emacs daemon 和桌面会话绑定,退出时会杀掉,所以用 tmux 来保留某些终端会话;
Tmux 写 shell 脚本来自动化需要交互的步骤,比如服务器开机进 BIOS 修改设置等,比较方便。
我每天都用tmux,进入terminal,就会把tmux打开。但不和Emacs连用,就是各用各的。
因为机器太多了,而且机器上只有screen,一直用screen,非常稳定。不折腾tmux,用过,不太习惯。
每天都在用。。。。