10x 程序员之 tmux
Preface
Tmux
tmux is a terminal multiplexer.
Tmux可以在一个 terminal
终端窗口中管理多个 session
会话,多个 session
之间轻松的切换, 同时 tmux
的 session
会话可以在多个 terminal
终端之间共享和复用。 tmux
以 deamon
线程在后台运行一个 server
,所有的 session
由该线程进行维护和管理,使得 session
与 terminal
终端分离。
会话 (Session)
session即会话,当使用 terminal
建立与主机的连接后,也就是建立了一个 session
。传统的 terminal
终端与 session
1:1
绑定, session
随着 terminal
的开启与关闭而建立和终止。 tmux
中的会话与终端无任何关系, terminal
的角色只是一个通信的工具。 tmux
中的 session
是一个 server
对应多个 session
的 1:N
的模式,如下图所示。
新建会话 (New)
-
不指定名称,直接执行
tmux
命令,此时自动分配一个 session
数字名称,从 0
开始递增; -
指定名称,执行
tmux new -s
, 此时 session
就具有一个易于辩识的名称;
脱离会话 (Detach)
-
命令式: 处于 session
内时,直接在执行命令tmux detach
,即可使 session
进入后台运行; -
Ctrl+b d Ctrl b d
tmux的快捷键采用 Ctrl+b
的组合方。
查看会话 (List)
脱离会话后,若想查看后台运行的会话,则可使用 list
相关的命令,以列表的形式展示会话。
tmux list-sessions // 标准命令
tmux ls // 简写命令
重命名会话 (Rename)
有时我们可能在一个 session
中,做多件事情或者重新建立连接到新的主机,这里可能会话名称有可能无法表达对应的意思,从而有了更名的需要。 tmux
为我们提供两种更名方式,如下:
-
命令式:
tmux rename -t
-
快捷键:
ctrl+b $,
进入会话 (Entry)
session进入使用的命令是 attach
, 使用 attch
后,就可把后台运行的 session
唤回前台执行。
tmux attach-session // 进入最近脱离的一个 session 会话
tmux attach-session // 进入指定的 session 会话
不能在一个 session
中 attach
另外一个 session
, tmux
不支持 session
的嵌套使用。
销毁会话 (Destroy)
tmux的 session
可以脱离 terminal
终端存活,所以 session
的结束不会随着终端的关闭而结束, session
的结束需要执行特定的命令方可。
tmux kill-session -t // 在任意的 terminal 终端中执行即可
exit // 这个只针对于结束当前 session
切换会话 (Switch)
当在一个 session
执行任务时,如果想切换到别的 session
时,可采用快捷键进行切换,而不用退出后再重新进入。
ctrl+b ( // 前一个会话
ctrl+b ) // 下一个会话
ctrl+b L // 最后一个会话
ctrl+b s // 列出所有会话
Ctrl+b s
列出会话后,需要使用 h j k l
或者方向键进行选择,然后 Enter
键进入。
窗体 (Window)
tmux的一个 session
支持多个 window
, session
与 windonw
之间的关系如下图所示。
创建窗体 (New)
session中的 window
可以简单的对应为一个 terminial
终端的展示界面,因为每个 window
使用时,它独占了整个 terminal
的展示界面。 window
的创建有如下两种方式:
-
命令式:
tmux new-window
-
快捷键:
ctrl+b c
窗体切换 (Switch)
window的切换命令综合如下:
ctrl+b p // 前一个
ctrl+b n // 下一个
ctrl+b // 这儿的 代表数字,切换到对应数字的窗体
ctrl+b w // 列表展示出所有的窗体
ctrl+b l // 切换到最一个会话
ctrl+b & y // 关闭当前窗体
ctrl+b ' // 代表窗体的编号
窗格格 (Pane)
tmux的 window
也可再切分成更小的单元,那就是 pane
窗格。 pane
可以在一个 window
中同时展示多个不同的内容, 如图所示。
窗格操作 (Operation)
ctrl+b % // 垂直分割
ctrl+b " // 水平分割
ctrl+b o // 窗格间按顺序切换
ctrl+b ↑ | ↓ | ← | → // 向指定方向切换
ctrl+b Space // 重新调整窗格大小
ctrl+b z // 当前窗格最大化
ctrl+b x // 关闭当前窗格
配置 (Config)
窗格绑定 (Bind)
软件的修改化使用始终是离不开配置文件, tmux
使用 ~/.tmux.conf
为配置文件。如果你是一个 Vim
的重度使用者,那么在 pane
的切换时,肯定不习惯方向键的使用,而偏向于 h j k l
进行导航。而 tmux
也支持此功能,仅需在配置文件中加入下面的绑定语句就可。
# hjkl pane traversal
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
如果你在修改配置文件前没有启动 tmux
的话,你修改配置文件后马上就生效,但是如果你是在 tmux
运行当中修改的话,还需要执行命令加载配置文件,命令如下:
ctrl+b :, source-file ~/.tmux.conf
复制粘贴 (copypaste)
tmux支持的复制功能比较强大与方便,需启用 vi
模式的支持。修改 ~/.tmux.conf
配置文件,添加如下配置。
# vi copypaste mode
set -g mode-keys vi
复制粘贴模式流程如下:
1. `ctrl+b [` // 进入复制粘贴模式
2. `space` // 开始选择内容
3. `enter` // 复制内容
4. `ctrl+b ]` // 粘贴内容
进入文本复制和粘贴模式,可以使用相关的 Vim
命令进行操作,快捷而高效。
Appendix
- https://github.com/tmux/tmux/wiki/Installing