关于Tmux的介绍

Tmux 是一个终端多路复用器:它相当于为终端编程增加了功能。您可以在一个会话中管理多个终端,分割终端屏幕,断开和重新连接会话等等。如果您大部分的编程都是在命令行进行的,您会发现使用终端多路复用器非常有价值。
设置
首先,您需要通过包管理器安装 Tmux 或 下载 它。Tmux 具有高度的可配置性,但我首先建议更改的是 ssh,而不是 Tmux。通过向 ~/.ssh/config
添加以下内容来使 ssh 对所有连接“保持活跃”:
host *
ServerAliveInterval 300
ServerAliveCountMax 3
如果该文件不存在,则创建它。此配置指示您的本地机器为所有用户 ssh 会话每 300 秒向服务器发送一个活跃消息,以保持 ssh 会话活跃。如果本地机器发送 3 个未回答的消息,它将断开会话。您应根据需要调整这些设置:例如,通过将 host
限制为特定域名,您可以为每个域名设置不同的设置。如果您有缓慢或不稳定的互联网连接,请考虑将 ServerAliveInterval
更改为更低的数字,以便发送更频繁的消息。
如果您对使用的服务器有权限,您可以使用类似的配置更新它们,在 /etc/ssh/sshd_config
中。
ClientAliveInterval 300
ClientAliveCountMax 3
前缀和“唯一命令™”
安装 Tmux 后,从命令行启动新的 Tmux 会话
$ tmux
Ctrl-b
是 前缀 组合。同时按下 Ctrl 键和字母 b。在 Tmux 会话内部,前缀几乎总是先于快捷键按下来触发命令。
前缀组合非常重要。一旦您掌握了前缀组合,您就可以仅通过一个命令基本上自学 Tmux。要显示 Tmux 命令列表,请输入:Ctrl-b ?
这意味着同时按下 Control
和 b
,然后释放,再按 ?
。Tmux 应该显示
bind-key C-b send-prefix
bind-key C-o rotate-window
bind-key C-z suspend-client
bind-key Space next-layout
bind-key ! break-pane
bind-key " split-window
bind-key # list-buffers
bind-key $ command-prompt -I #S "rename-session '%%'"
bind-key % split-window -h
bind-key & confirm-before -p "kill-window #W? (y/n)" kill-window
bind-key ' command-prompt -p index "select-window -t ':%%'"
bind-key ( switch-client -p
bind-key ) switch-client -n
bind-key , command-prompt -I #W "rename-window '%%'"
bind-key - delete-buffer
bind-key . command-prompt "move-window -t '%%'"
bind-key 0 select-window -t :0
bind-key 1 select-window -t :1
bind-key 2 select-window -t :2
bind-key 3 select-window -t :3
bind-key 4 select-window -t :4
bind-key 5 select-window -t :5
bind-key 6 select-window -t :6
bind-key 7 select-window -t :7
bind-key 8 select-window -t :8
bind-key 9 select-window -t :9
bind-key : command-prompt
bind-key ; last-pane
bind-key = choose-buffer
bind-key ? list-keys
bind-key D choose-client
bind-key L switch-client -l
bind-key [ copy-mode
bind-key ] paste-buffer
bind-key c new-window
bind-key d detach-client
bind-key f command-prompt "find-window '%%'"
bind-key i display-message
bind-key l last-window
bind-key n next-window
bind-key o select-pane -t :.+
您还可以更改前缀组合(请参阅“配置选项”部分)。如果您这样做,请记住在下面的示例中使用您的前缀组合而不是 Ctrl-b
。
窗口控制
让我们看看 Tmux 的一个关键特性:窗口。它们与浏览器的标签类似。每一个都是一个不同的终端,您可以在其中同时运行不同的命令。要创建一个新窗口,请按 Ctrl-b c
。您可以在窗口之间切换:按 Ctrl-b n
转到下一个窗口,按 Ctrl-b p
则转到上一个窗口。按 Ctrl-b w
列出会话中的所有窗口,并允许您选择要激活的窗口(使用箭头键和 Enter)。
如果您知道窗口号,您也可以直接跳转到它,使用 Ctrl-b #
,将“#”替换为窗口号。默认情况下,它们从 0 开始,而不是 1!
您可能想知道使用 Tmux 窗口而不是标签式终端的好处是什么。首先,如果常规终端的窗口管理器崩溃,您将丢失终端。这不会在 Tmux 中发生:它将在后台保持终端运行,您可以在任何时间将新的终端重新连接到它们。窗口还可以细分为窗格,所有窗格都运行伪终端。让我们现在看看它们。
窗格控制
窗格很棒。您可以根据喜好水平分割、垂直分割窗口,以及以任何尺寸分割。您在编码时是否曾想快速查找手册页?而不是回到终端,查找手册页,然后再将编辑器放到前台,只需打开一个新的垂直窗格,如下所示
现在您可以在同一时间阅读手册页面和代码;您甚至可以在两个窗格之间复制和粘贴。方便多了!
最近我正在处理大量数据;我用3个窗格运行数据处理,用1个窗格监控服务器资源,并使用htop来安排我的Tmux窗口。这个服务器几乎超载了。
这些都是关键窗格控制
Ctrl-b " split pane horizontally
Ctrl-b % split pane vertically
Ctrl-b o next pane
Ctrl-b ; prior pane
Ctrl-b ←↑→↓ jump to pane
Ctrl-b Ctrl-o swap panes
Ctrl-b space arrange panes
Ctrl-b-←↑→↓ change pane size
Ctrl-b ! pop a pane into a new window
箭头 ←↑→↓
代表箭头键,只需使用其中一个。例如,要跳转到右侧的窗格,您需要按 Ctrl-b →
。更改窗格大小的控制键略有不同。要使其工作,您首先必须拥有多个窗格。接下来按 Ctrl-b
并按住控制键。现在您可以通过重复按箭头键来更改窗格大小。
Ctrl-b !
是我最喜欢的功能之一。它将当前窗格从窗口中弹出,并将其移动到自己的窗口中。如果您在一个窗格中做一些不相关的活动,并想重新组织您的设置,这真是太好了。
滚动和复制/粘贴
如果您能掌握Tmux中的滚动和复制/粘贴,您就能掌握任何东西。我不会撒谎,这是最不灵活的功能。但它的确很有用。界面是模态的,所以首先通过输入 Ctrl-b [
进入滚动模式。
按 esc
将退出滚动模式。你应该知道你处于滚动模式,因为一个橙色行数出现在窗格的右上角。
一旦进入滚动模式,您可以使用箭头键和页面上下键来移动光标。默认情况下,Tmux保留的历史记录不多,但您可以更改这一点(参见配置选项部分)。
您可以在滚动模式中复制和粘贴。当您有分割屏幕作为常规高亮显示,并且使用鼠标无法在垂直分割的窗格中复制时,这非常有用。
要复制,将光标定位到您想要开始复制的位置。按 Ctrl-space
开始高亮显示要复制的文本。按 Alt-w
复制高亮显示的文本。按 Ctrl-b ]
将粘贴复制的文本。有方法可以使复制和粘贴更容易:Tmux有一个“vim类似”的复制模式(参见配置选项部分和手册页面以获取详细信息)。
快捷键 您可以使用 Ctrl-b PgUp
一举进入滚动模式和向上翻页(感谢Ludovic Tolhurst提供的提示)。
附加功能 - 搜索
如果您花了时间学习滚动模式,您应得到一些额外的东西,一些特别的东西。这是您的奖品:您可以在Tmux缓冲区中搜索!只需使用 Ctrl-b [
进入滚动模式,然后按 Ctrl-r
。输入您的搜索文本并按回车。Tmux将跳转到它找到的最后一个匹配项。您可以按 n
跳到下一个匹配项或按 Shift-n
跳回一个匹配项。
还有 Ctrl-s
可以在缓冲区中向下搜索,但我几乎从不使用它。
会话控制
会话是Tmux最有用的功能之一。它们允许您将多个终端进程组合成一个Tmux会话,可以对它进行操作(附加),将其放入后台(分离)并按照您的意愿丢弃。程序员通常会为不同的项目使用不同的会话。因为Tmux在客户端-服务器架构下运行,即使启动Tmux的原始终端死亡或您的桌面GUI崩溃,Tmux会话也会保留,包括其中的所有终端会话。
使用 Ctrl-b d
分离您的Tmux会话。这将返回您到常规终端提示符。
要列出现有的Tmux会话,只需使用 ls
命令。
$ tmux ls
0: 1 windows (created Thu Jan 28 08:15:20 2016) [190x50] (attached)
2: 2 windows (created Thu Jan 28 09:11:59 2016) [190x50]
这显示了有两个Tmux会话正在运行,其中一个已经连接到终端窗口。要连接到会话,只需在终端提示符中使用attach
命令即可。
$ tmux attach
默认情况下,Tmux会连接到下一个未连接的会话(在本例中是“2”)。如果我有许多不同的会话并想连接到特定的一个,我可以用-t
指定目标。
$ tmux attach -t 2
配置选项
文件~/.tmux.conf
是Tmux用于本地配置的纯文本文件。这是我配置的样子。
# set scroll history to 10,000 lines
set -g history-limit 10000
# modern encoding and colors
set -g utf8 on set-window-option -g utf8 on
set -g default-terminal screen-256color
# don't use a login shell
set -g default-command /bin/bash
# unbind the prefix and bind it to Ctrl-a like screen
unbind C-b set -g prefix C-a bind C-a send-prefix
Tmux以一个小型的滚动历史开始,所以我喜欢将其增加。现代编码和颜色是为了与我的终端设置相匹配——它们现在甚至可能是Tmux的默认设置。默认情况下,Tmux使用登录shell,因此每个新窗口都会执行.bash_profile
。我更喜欢禁用这种行为,只启动常规的非登录shell。
Tmux还有数百个其他选项:许多用户会切换到像zsh这样的不同shell,启用使用触摸板的窗口切换,在Tmux底部显示自定义数据(如天气信息)等等。复制其他程序员的配置文件是学习和实验的好方法。
要在Tmux会话中重新加载.tmux.conf
,请输入:Ctrl-b :
然后输入source-file ~/.tmux.conf
。
Tmux资源
官方Tmux网站是一个很好的起点,其中包含摘要信息、变更日志、下载以及到广泛手册页的链接。Arch Linux的tmux文档涵盖了高级功能和故障排除技巧。Pragmatic Bookshelf的书籍tmux - Productive Mouse-Free Development是Tmux的全面介绍。
GNU Screen是另一个终端多路复用程序。它比Tmux老一些,有些过时,但它有Tmux的大部分功能。Screen和Tmux的控件足够相似,如果你熟悉其中一个,就可以使用另一个。Tmux的常见问题解答列出了它们之间的区别。
本文最初发布在PerlTricks.com上。
标签
反馈
这篇文章有什么问题吗?请通过在GitHub上打开一个问题或拉取请求来帮助我们。