关于 tmux
tmux 是一个终端多路复用器。 它允许您使用多个虚拟终端访问一个 tmux 终端。
tmux的安装和基本使用在其相关文章中有介绍。
这篇文章的重点是在云服务器上配置 tmux(这在 screen 上是出了名的困难)。 tmux 的可配置性是我们可用的另一个强大工具。
配置文件
当 tmux 启动时,它会在您的主目录中查找名为 .tmux.conf
的文件。 如果存在,则 tmux 使用该文件中设置的配置。
使用您最喜欢的文本编辑器,在您的主目录中打开一个名为 .tmux.conf
的新文件。
对于 tmux,以“#”开头的行是注释。
前缀键
前缀键是 tmux 中所有命令之前的组合键。 默认情况下,前缀键是Ctrl-b
。 这个组合键不仅在大多数键盘上按起来不舒服,而且还碰巧与其他一些绑定(例如在 vim 中)发生冲突。
一个常见的替代品是 Ctrl-a
。 这个更舒服的组合来自 screen,它在 tmux 诞生之前就使用了这个前缀。
我们可以在 tmux 的所有会话中启用此功能,只需在 tmux.conf 中包含一行:
set-option -g prefix C-a
由于我们不再使用 Ctrl-b 作为前缀,我们应该禁用它:
unbind-key C-b
请注意,Ctrl-a 确实与 Emacs 文本编辑器冲突。
将前缀发送到嵌套的 tmux 会话
使用 tmux 一段时间后,您可能会开始使用 tmux 连接到您也使用 tmux 的远程云服务器。
尝试在远程会话中执行命令变得不可能,因为前缀被本地 tmux 会话拦截和处理。
幸运的是,tmux 有一个名为 send-prefix 的内置解决方案。 通常,send-prefix 绑定到 Ctrl-b,与我们的前缀键相同的组合键。 这意味着可以使用 Ctrl-b Ctrl-b
发送前缀。
但是我们只是取消绑定 Ctrl-b 因为它可能与其他应用程序冲突。 我们可以通过将 Ctrl-a 绑定到 send-prefix 来保持命令的精神(重复前缀):
bind-key C-a send-prefix
现在,将前缀发送到远程会话就像 Ctrl-a Ctrl-a
一样简单。
窗口编号
与窗格不同,窗口使用从零开始的索引。 0 键与 1 相距甚远,在大多数键盘上都很难按。
我们可以强制 tmux 对窗格等窗口进行编号,从 1 而不是 0:
set -g base-index 1
禁用转义序列延迟
tmux 支持转义序列。 这有时很方便,但更多时候它会妨碍,例如在使用 vim 甚至 shell 时。 特别是,tmux 在转义后等待半秒,以确定下一个键是否可能是函数或序列的一部分。
这通常是 tmux 的不良行为,因此我们可以禁用它:
set-option -sg escape-time 0
整体设置
按照本文中的所有步骤,一个好的入门 .tmux.conf 可能如下所示:
# Ctrl-b is a bad prefix key, use Ctrl-a instead set-option -g prefix C-a unbind-key C-b # Also assign Ctrl-a to send the prefix to a remote session bind-key C-a send-prefix # Windows should be numbered from 1 like panes set -g base-index 1 # Disable tmux waiting for an escape sequence set-option -sg escape-time 0