发现咱们这里没人用tmux

虽然你说的很对,但是充满偏见的标题才是吸流法宝。

Ctrl+B外层tmux,Ctrl+A内层tmux

顺便还用tmux recurrent恢复会话,有我这样嵌套tmux的么?

vps保持现场, 超级方便,谁用是知道

1 个赞

我一直用终端+tmux+neovim/emacs

2 个赞

我 tmux 一直有在服务器上用,大概有两年使用经验了,不过主要只用来后台常驻些 shell session,方便随时恢复回来。 而 zellij 则是目前则是我本地的默认终端环境,常见的终端操作(多窗口、分屏、)目前基本都借助 zellij 实现,编辑环境则是 zellij + neovim.

我的体验上,zellij 的键位设计用起来非常舒适,尤其是新手引导做得非常的好,而且 zellij 原生支持鼠标操作,基本不用改什么配置,使用起来就跟普通终端环境没啥区别了,键位完全不需要记忆,在 step-by-step 的保姆式引导下,我花了半天基本就完全熟悉了所有常用键位,使用流程中没任何明显卡顿了。

而 tmux 默认的配置,非常难用,键位设计反人类,又没任何新手引导,我到现在浅度使用了两年,也只是记住了些常用的键位。另外很多功能都依赖插件实现,但插件性能又比较拉,装不了几个插件,启动速度就明显慢了很多(貌似手动关掉几个啥功能能变快很多,但这已经够劝退我了)。

总之我觉得 zellij 开箱即用,更新手友好、更现代、更快更流畅,方方面面完全超越了老牌的 tmux.

1 个赞

tmux对我来说就一个功能,在ssh server上跑个程序丢在后台,从而可以让我关了现在的terminal窗口(习惯了随用随开随关)

其实长期工作在服务器上它的必要性就体现出来了,对我来说就是个wm感觉;本机上,我是macos,terminal随用随开;用linux机子i3时它还是很有用的

1 个赞

怎么会,我就在用。mac 上面打开 term 就是一个 tmux 窗口,基本对 term 的特性没有依赖,所以可以随意换 term。 然后启动一个 emacs daemon,alias vim=emacs 就可以开用了。。

1 个赞

我一直用的。

工作流不依赖 term 的特性,这也是我尤其喜欢的一点,可以流畅更换各种 term。 尤其是每个 term 的 scrollback/search 等功能实现都各有不同,但做得全都不如 zellij。

你是 neovim 用户,不是 emacs 用户,vim 因为模态编辑的优势,不依赖需要修饰键的键位,那确实 zellij 的键位还是可以用的。但是 zellij 的默认键位有一个死穴:你没有任何办法发送一个真正的 ctrl+g 给里面正在运行的程序。想象一下你是 emacs 的用户,用不了 ctrl+g 意味着什么,你懂的。。。

ctrl+g 是 emacs 里最重要的三个快捷键(M-x, C-c,C-g)。再假设一下就算你把 ctrl + g 改成了别的键(假设你改成了 ctrl+q),因为 emacs 大量依赖 ctrl 键,甚至 bash/zsh (以及任何使用 readline 的终端程序比如 python, ipython 等等等)的快捷键这会导致你会不停的按 ctrl+q ,因为你需要不停的在 zellij 的按键和 readline 模式的快捷键下切换,除非你从来不用 readline 默认的那套 ctrl + bpfnaehku 的快捷键。

这同样带来了另一个问题,因为zellij 默认的快捷键的那套 schema 就是,你会需要一个锁定键(不管是什么键),而这个锁定键是你没有任何办法发送到 zellij 里面运行的那个 app 里的。而 tmux 不一样,tmux 的按键 schema 是围绕 prefix 展开的 (ctrl + b 或者任何你魔改的其他键),所以你想把一个真正的 ctrl + b 发送到终端,你只需要按两次 ctrl + b 就行了。

我之前体验 zellij 的时候,为了解决我的强迫症(就是想办法要能够把锁定键发送到终端里面去),最后我魔改了 zellij 的按键配置为如下的情况:


    locked {
        bind "Alt g" { SwitchToMode "Normal"; }
    }

    normal {
        bind "Alt g" { SwitchToMode "Locked"; }
    }

    shared_except "locked" {
        bind "Alt g" { Write 27 7015; SwitchToMode "Normal"; } // send a real Alt+g to the terminal
    }


意思就是我把 alt + g作为锁定键,同时当我处在非 normal 以及非锁定模式下 (例如 tab 模式,pane 模式等等等)的时候,我按 alt + g 就可以发送真正的 alt + g 给 zellij 内部运行的 app。

当然主要是我有强迫症,我不能接受 zellij 默认的那套快捷键逻辑就是这种强制性的就直接吞掉一个按键的行为,所以一定要通过魔改的方式来绕过它。你要是没强迫症的话,设置一个自己从来不用的键作为锁定键倒也问题不大。

3 个赞

另外,我发现一点我觉得很有趣的现象,这些用 rust 重写的经典命令行应用,都有一个普遍存在的现象:更易上手,开箱即用,具备一个更漂亮的原生 UI,但是在可配置性上都存在缺陷。

比如 zellij,目前 zellij 写插件应该是只能用 wasm 来写,而且没有任何的文档,所以所谓的插件基本上等同于官方 “bundle” 的非核心功能,而非用户可以自己随意 hack 的“配置”。

再比如 helix,helix 的插件系统都难产了多少年了,之前说要用 wasm,现在说要用 schema,也不知道要做到什么时候了。

就我个人的角度而言,我会希望我选择的 app 是可以随意所欲的“配置”的,也就是说我会希望能够用一个真正的脚本语言去写配置,而不是只能用 json/kdl/toml/yaml 之类的配置语言去写配置。如果不能够随心所欲的灵活配置我使用的工具链,我为啥不直接使用 vscode,一把梭,啥都全给你干完了。

在此点名表扬 wezterm,lua 是王道啊王道,所有的配置语言真的都应该使用 lua!

1 个赞

不就是在终端里 kill 么,Emacs 里遇到异步的卡的 C-g 真的不如 kill 好用。不过至少 tmux 这么设计当然是经住了时间考验的,一些由「外行人」做的新东西就多少有些设计是没有经过深思的

2 个赞

理解了,wezterm 我也觉得挺不错,但它目前太以 wez 为核心了,hyprland 下崩溃的问题都快一个月了,fix merge 了也没见发个新版本 fix 下, 也不知道 wez 是个啥想法。 我就因为这个换回了 kitty. 这也是促使我尝试 zellij 的重要原因:wayland compositors 现在不太稳定,wezterm 这种崩溃了又不发新版本修的情况,用 fork 自己编译又感觉太费时间了,换个 kitty 会出现各种 scrolback/search 功能的体验不一致,干脆彻底抛弃 emulators 自身的特性,统一用 zellij 了。

我用啊,重度使用。不过不是在emacs中用。一般是开一个终端模拟器,比如gnome-terminal,然后在里面跑tmux开多个pane,绑定快捷键ctrl-a + <0-9>切换。

也想请教下各位道友是平时怎样使用终端的,都是在emacs中用vterm或eshell之类吗?如果面临需要多个目录下来回切换做不同的事,怎么处理的呀?

我搞机器学习,平时只用emacs + tramp + vterm跑各种test,正式炼丹必然要放在tmux里面

借问下,大家在Windows终端中(比如Terminal、WezTerm、Alacritty)使用emacs,C+. 快捷键能使吗?有没有办法重新绑定?

wezterm + kkp 可以 wezterm好像用的kitty的键盘协议,但我没有长期用过

好像需要配置下https://wezfurlong.org/wezterm/config/key-encoding.html

enable_kitty_keyboard = true
1 个赞

windows term 可以

怎么配置呀? 我用Windows Terminal,在Emacs中没法用 C-. ,变成了next-line

我没配置这个,默认就是只要。

你的默认配置可以用 C-.:thinking: