参考资料:Tmux 使用教程 - 阮一峰的网络日志 (ruanyifeng.com)
命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令。用户与计算机的这种临时的交互,称为一次"会话"(session) 。
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
一个典型的例子就是,SSH 登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失了。
为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口。
一个窗口中,可以继续划分为多个窗格,在多个窗格中执行命令。效果类似于Terminator。
Tmux 是一个终端复用器(terminal multiplexer),可以将会话与窗口"解绑"。
(1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
(2) 它可以让新窗口"接入"已经存在的会话。
(3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
(4)它还支持窗口任意的垂直和水平拆分。
Oh my tmux用于美化并降低Tmux的配置难度,和Tmux的关系就像oh-my-zsh和zsh的关系一样。
安装Tmux
sudo apt install tmux
安装Oh my tmux
命令来自仓库:GitHub - gpakosz/.tmux: Oh my tmux! My self-contained, pretty & versatile tmux configuration made with ❤️
cd && git clone https://github.com/gpakosz/.tmux.git \
&& ln -s -f .tmux/.tmux.conf \
&& cp .tmux/.tmux.conf.local .
Oh my tmux自带的所有快捷键见bindings
默认前缀快捷键Ctrl
+ a
和 Ctrl
+ b
。有些快捷键是安装Oh my tmux后才有的。
下面列出常用的几个命令和快捷键。
tmux
xxxxxxx
d
切换到后台运行。或使用快捷键 c
新建一个窗口,然后执行命令:tmux detach
tmux attach
若正在运行的命令不在当前打开的窗口,使用快捷键(Oh my tmux的快捷键)
切换到上一个窗口,或
切换到下一个窗口。或执行命令:
tmux selectw -t 窗口编号
正在执行命令时,想要执行tmux的命令,可以新建窗口再执行,或按下快捷键
m
打开或关闭鼠标模式像平时使用终端那样复制终端内容的时候,需要关闭鼠标模式。
打开鼠标模式的时候,左键窗口可以切换,右键可以操作。
C-l
是Oh my tmux的快捷键,可以清除tmux history同时清屏 C-c
创建一个新会话(C-c
表示Ctrl
+ c
)。用于已经打开tmux后,再次创建新会话。tmux
可以在底线命令下执行
new-session
tmux new-session -s session_name
可以在底线命令下执行
new-session -s session_name
s
打开会话预览窗口,方向键切换会话,回车进入会话 C-f
按名称切换到另一个会话tmux switch -t 0
tmux switch -t <session-name>
$
重命名会话tmux rename-session new_name
tmux kill-session -t 会话名称
tmux kill-session -t 会话名称 -a
tmux kill-server
分离会话后,命令就会在后台运行。
d
分离会话tmux detach
tmux ls
c
创建一个窗口tmux new-window
C-h
切换到上一个窗口 C-l
切换到下一个窗口 w
打开预览窗口,方向键切换会话,回车进入会话 ,
重命名窗口tmux rename-window new-name
C-d
或命令exit
都可以关闭窗口。当一个会话的所有窗口都关闭后,这个会话也会关闭。 ?
列出快捷键。按q
可以退出。安装Oh my tmux之后,修改配置文件时就要按照说明,修改Oh my tmux创建的配置文件,而不是直接修改tmux的配置文件:configuration
e
打开配置文件 r
重新加载配置文件例如创建一个名称为session的会话,在这个会话中创建名称为window的窗口,然后在这个窗口中执行echo和tail命令。
需要使用:
tmux new -s "session" -n "window" -d && tmux send -t "session:window" "echo 'hello world' && tail -f /dev/null" ENTER