本文首发于我的个人博客:Suixin's Blog
原文: https://suixinblog.cn/2018/12/tmux.html 作者: Suixin
之前在服务器跑代码的时候用到了screen
会话管理命令,可以新建不同的session来不间断运行shell。而tmux
更为强大,不仅提供了会话的管理,还支持同一窗口下分出不同的窗格。
总的来说,tmux
的结构分为:
- session
- window
- pane
- window
命令行安装
macos
使用brew install tmux
进行安装;
CentOS
使用yum install tmux
进行安装时发现版本为1.8较低,所以通过源码编译的方式进行安装:
-
安装依赖:
yum -y install ncurses-devel yum -y install libevent-devel
-
安装
tmux
git clone https://github.com/tmux/tmux.git cd tmux sh autogen.sh # 若提示找不到aclocal命令,则安装yum install -y automake ./configure && make # 若提示没有C编译器,则安装yum install -y gcc make install
-
检查版本
tmux -V # 可能提示无tmux命令,制作软连接即可 ln -s /usr/local/bin/tmux /usr/bin/tmux
常用参数
tmux new -s <name>
:新建名为name
的会话(无-s
参数则默认以数字命名);
tmux at -t <name>
:恢复(attach) 名为name
的会话(无-t
参数则默认恢复上一次的会话(at
可简写为a
);
tmux ls
:列出所有会话;
tmux kill-session -t <name>
:关闭名为name
的会话;
tmux kill-server
:关闭所有会话。
快捷键(在tmux session中)
这里所有的快捷键都是以Ctrl+B
开头的(Mac也是⌃+B
而不是⌘+B
)。以下所有命令均在按下前缀Ctrl+B
后再按下生效。
会话
D
:分离(detach) 当前会话(会话仍在后台运行);
S
:列出所有会话,此时可通过方向键和回车键切换;
$
:重命名当前会话;
:new -s <name>
:创建并进入名为name
的会话(不存在父子级关系)。
窗口(标签页)
窗口在tmux中相当于同一个session下的子窗口。
想到的使用场景为:在一个多人使用的服务器下,你只需新建自己名字的sessiontmux new -s suixin
,想要再新建会话时,不去tmux new -s suixin2
,而是选择在已有的suixin
session下新建窗口,避免了多用户用tmux
开启巨多session的困扰。(说的有点绕……)
c
:新建窗口;
w
:列出所有窗口,此时可通过方向键和回车键切换;
n
:切换到后一个窗口(使用后面的主题后失效);
p
:切换到前一个窗口(使用后面的主题后失效);
,
:重命名当前窗口(不知是否可以在创建时就命名);
&
:关闭当前窗口。
窗格(分割窗口)
窗格为tmux
优于screen
的一个强大的功能,可以实现在同一个窗口下分割窗口为多个窗格运行不同的命令,一览无余。棒棒棒!!
%
:垂直分割;
:
:水平分割;
x
:关闭窗格(也可以直接在命令行输入exit
);
o
:交换窗格(将输入切换到下一个窗格);
q
:显示窗格的编号(和尺寸),此时可通过按下数字切换(使用后面的主题后数字切换失效);
{
:与上一个窗格交换位置;
}
:与下一个窗格交换位置。
一个漂亮的tmux配置
有人配置了一个比较全的tmux,见https://github.com/gpakosz/.tmux 。
新特性:
- 鼠标(开启键为
Ctrl+A+M
)。可切换windows、panes,鼠标滚动,复制等; - 快捷键前缀改为
Ctrl+A
并兼容Ctrl+B
; - 更改了部分快捷键,使之更方便,见 https://github.com/gpakosz/.tmux#bindings ;
- 美化底栏;
- 窗口编号从1开始;
- 当前窗口用蓝底显示,当前pane用蓝框显示;
- 漂亮的界面。
拉取文件:
git clone https://github.com/gpakosz/.tmux.git
ln -s -f .tmux/.tmux.conf
cp .tmux/.tmux.conf.local ./
我修改了~/.tmux.conf.local
文件中的左右底栏配置,然后source
该文件(好像Linux服务器不能显示电池信息):
tmux_conf_theme_status_left=' ❐ #S '
tmux_conf_theme_status_right='#{prefix}#{pairing}#{synchronized} #{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{loadavg} | #{username}#{root} | #{hostname} '
我比较常用的窗格设置,左边主界面,右上角可以实时cd
到某些文件夹查看,右下角为top
:
其他
Ctrl+B+T
:显示时间,按任意键返回。
查找窗口、调整窗口排序、调整窗格尺寸、同步窗格、文本复制模式等功能在参考中可以找到。
参考
https://gist.github.com/ryerh/14b7c24dfd623ef8edc7
https://github.com/gpakosz/.tmux
https://harttle.land/2015/11/06/tmux-startup.html