Tmux 的使用和记录

之前听说过 Tmux,有很强大的功能,会话复用,分屏,保存当前会话,共享会话… 今天专门学习了解了下这玩意,本文是一篇安装配置记录(只是怕忘了快捷键 🙂)

安装后效果

内容如下:

文中使用环境为 CentOS 7

安装 Tmux

CentOS 7 中使用 yum 安装只有 1.8 版本,所以建议下载源码编译安装

包管理方式安装(除 macOS 外,可能版本不是最新):

1
2
3
4
5
6
7
8
# CentOS
yum install tmux

# Ubuntu & Debain
apt-get install tmux

# macOS
brew install tmux

源码编译安装,编译前需先安装:ncurses 和 libevent

1
2
3
4
5
6
7
# 下载最新的 release 版本: https://github.com/tmux/tmux/releases/latest
# 以当前(2020-7-3)最新 3.1b 为例
wget https://github.com/tmux/tmux/releases/download/3.1b/tmux-3.1b.tar.gz
tar -zxvf tmux-3.1b.tar.gz
cd tmux-3.1b
./configure && make
sudo make install

配置 Tmux

在用户目录新建 .tmux.conf 文件,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
set -g prefix C-a         # 修改 Prefix 组合键为 Ctrl + a
unbind C-b # 取消 Ctrl + b 的快捷键组合
bind C-a send-prefix # 修改 Prefix 组合键为 Ctrl + a
set -g prefix2 ` # 修改 Prefix 备用组合键为 `

set -g base-index 1 # 窗口编号从 1 开始计数
set -g pane-base-index 1 # 窗格编号从 1 开始计数
set -g status-bg black # 设置状态栏背景黑色
set -g status-fg yellow # 设置状态栏前景黄色
set -g mouse on # 开启鼠标
set -g default-terminal "screen-256color" # 设置默认终端模式为 256color
setw -g allow-rename off # 禁止活动进程修改窗口名
setw -g automatic-rename off # 禁止自动命名新窗口
setw -g mode-keys vi # 进入复制模式的时候使用 vi 键位(默认是 EMACS)

# -----------------------------------------------------------------------------
# 使用插件 - via tpm
# 1. 执行 git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
# 2. 执行 bash ~/.tmux/plugins/tpm/bin/install_plugins 或在 Tmux 内 Prefix + I
# -----------------------------------------------------------------------------

setenv -g TMUX_PLUGIN_MANAGER_PATH '~/.tmux/plugins'

set -g @plugin 'tmux-plugins/tmux-pain-control' # 方便分屏操作
set -g @plugin 'tmux-plugins/tmux-resurrect' # 保存会话

# tmux-resurrect
set -g @resurrect-dir '~/.tmux/resurrect'

# 初始化 TPM 插件管理器 (放在配置文件的最后)
run '~/.tmux/plugins/tpm/tpm'

常用命令

启动新会话:

1
tmux [new -s 会话名 -n 窗口名]

恢复会话:

1
tmux at [-t 会话名]

列出所有会话:

1
tmux ls

关闭会话:

1
tmux kill-session -t 会话名

关闭所有会话:

1
tmux ls | grep : | cut -d. -f1 | awk '{print substr($1, 0, length($1)-1)}' | xargs kill

快捷键

先按下设置好的 Prefix 键,默认为 Ctrl + b,上面配置文件已修改为 Ctrl + a`,然后按如下按键

会话

1
2
3
:new <回车>   启动新会话
s 列出所有会话
$ 重命名当前会话

窗口(标签页)

1
2
3
4
5
6
7
c  创建新窗口
w 列出所有窗口
n 后一个窗口
p 前一个窗口
f 查找窗口
, 重命名当前窗口
& 关闭当前窗口

调整窗口排序

1
2
3
swap-window -s 3 -t 1  交换 3 号和 1 号窗口
swap-window -t 1 交换当前和 1 号窗口
move-window -t 1 移动当前窗口到 1 号

窗格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
%   垂直分割
" 水平分割
o 交换窗格
x 关闭窗格
⍽ 左边这个符号代表空格键 - 切换布局
q 显示每个窗格是第几个,当数字出现的时候按数字几就选中第几个窗格
{ 与上一个窗格交换位置
} 与下一个窗格交换位置
z 切换窗格最大化/最小化

# 使用 tmux-pain-control 插件
| 垂直分割
- 水平分割
\ 整体垂直分割
_ 整体水平分割

调整窗格尺寸

1
2
3
4
5
6
7
8
9
10
11
12
PREFIX : resize-pane -D          当前窗格向下扩大 1 格
PREFIX : resize-pane -U 当前窗格向上扩大 1 格
PREFIX : resize-pane -L 当前窗格向左扩大 1 格
PREFIX : resize-pane -R 当前窗格向右扩大 1 格
PREFIX : resize-pane -D 20 当前窗格向下扩大 20 格
PREFIX : resize-pane -t 2 -L 20 编号为 2 的窗格向左扩大 20 格

# 使用 tmux-pain-control 插件
shift + h 将分割线左移 5 格
shift + j 将分割线下移 5 格
shift + k 将分割线上移 5 格
shift + l 将分割线右移 5 格

其他

同步窗格,按下 Prefix,输入如下内容后回车,这个选项值针对某个窗口有效,不会影响别的会话和窗口

1
:setw synchronize-panes on/off

杂项:

1
2
3
4
d   退出 tmux(tmux 仍在后台运行)
t 窗口中央显示一个数字时钟
? 列出所有快捷键
: 命令提示符

其他设置

启动 shell 时自动启动 tmux

下面的配置会尝试只启动一个会话,登录时,如果之前启动过会话,那么它会直接 attach,而不是新开一个。

加入到 .bashrc.zshrc 中。

1
2
3
4
5
# TMUX
if which tmux >/dev/null 2>&1; then
#i f not inside a tmux session, and if no session is started, start a new session
test -z "$TMUX" && (tmux attach || tmux new-session)
fi

参考:

Tmux 的使用和记录

https://morooi.com/2020/tmux/

作者

SJ Zhou

发布于

2020-07-03

更新于

2022-08-16

许可协议

评论