使用 tmux 复用终端
Tmux 是一个终端复用软件。比如你开一个 terminal 窗口,相当于和本地的或远程的 Linux 建立了一次会话连接。
如果你想多做几件事,比如一个窗口运行服务,一个窗口运行客户端,对不起,你得再开一个窗口,再建立一个连接。
tmux 就是解决这个问题的工具,它可以让你的终端 (Terminal) 给复用 (mux) 了,在一次连接里面做无数多件不同的事情。
Ubuntu 自带 Tmux,无需额外安装。
概念
Tmux 有这么几个概念:
- Session:输入 tmux 后就创建了一个会话,一个会话是一组窗体的集合。
- Window:会话中一个可见的窗口,你的屏幕一次只会看到一个窗口的内容。
- Pane: 一个窗口可以分成多个窗格。
使用 tmux 的过程可以分为:
- 控制模式(按下或者按住前缀 (tmux-prefix),默认 ctrl+b, 下文用※表示),也就是用快捷键执行动作;
- 命令模式(输入 tmux 后接命令),执行内部命令,好理解;
- 一般模式,就是把窗格内的东西当一般 terminal 用;
配置
添加配置文件 .tmux.conf
,内容如下:
#-- base --#
# (可选) 设置 zsh 为默认 shell
set -g default-shell /bin/zsh
#-- settings --#
# 开启鼠标切换窗格,按住 shift 复制粘贴
set -g mouse on
# 窗口编号从 1 开始计数
set -g base-index 1
# 关掉某个窗口后,编号重排
set -g renumber-windows on
# 窗格编号从 1 开始计数
set -g pane-base-index 1
# PREFIX-Q 显示编号的驻留时长,单位 ms
set -g display-panes-time 5000
# 进入复制模式的时候使用 vi 键位(默认是 EMACS)
setw -g mode-keys vi
# 禁止活动进程修改窗口名
# setw -g allow-rename off
# 禁止自动命名新窗口
setw -g automatic-rename off
# 开启 256 colors 支持
set -g default-terminal "tmux-256color"
#-- bindkeys --#
# 以下 3 行设置 ctrl+x 代替 ctrl+b 的快捷键
set -g prefix C-x
unbind C-b
bind C-x send-prefix
# 设置 tmux-prefix + \ 垂直分割窗格
unbind %
bind \\ split-window -h
# 设置 tmux-prefix + - 水平分割窗格
unbind '"'
bind - split-window -v
# 设置 ctrl+vim 方式切换窗格
bind -n C-h select-pane -L
bind -n C-j select-pane -D
bind -n C-k select-pane -U
bind -n C-l select-pane -R
有了这个配置文件立刻就能生效。
常用操作
下面用 ※
代表 tmux 前缀,也就是 ctrl+x
,默认是 ctrl+b
。
鼠标
tmux 中执行有些正常 terminal 中的鼠标操作需要按住 shift
,多试试。
窗格的分割线可以直接用鼠标拖动。
命令
会话
tmux
新建无名称会话tmux new -s demo
新建名称为 demo 的会话tmux detach
断开当前会话,既※ + dtmux a
默认进入第一个会话tmux a -t demo
进入到名称为 demo 的会话tmux list-session
查看所有会话tmux ls
同上,简写
结束
tmux kill-server
关闭服务器,所有的会话都将关闭tmux kill-session -t demo
关闭 demo 会话tmux kill-window
关闭窗口tmux kill-pane
关闭窗格
控制
会话 (Session)
※ + d
休眠※ + s
以菜单方式显示和选择会话※ + L
切换回上一次的会话
窗口 (Windows)
※ + c
创建新窗口※ + n
选择下一个窗口※ + p
选择前一个窗口※ + l
最近一次活跃窗口之间进行切换※ + 0~9
选择几号窗口※ + ,
重命名窗口※ + .
更改窗口的编号,但只能更改成未使用的编号,所以要交换窗口的话,得更改多次进行交换※ + &
关闭窗口※ + w
以菜单方式显示及选择窗口※ + f
在所有窗口中查找内容
窗格 (Pane)
※ + z
最大化 / 还原当前窗格※ + "
模向分隔窗格,替换为了 -※ + %
纵向分隔窗格,替换为了 \※ + o
跳到下一个分隔窗格※ + x
关闭窗格※ + ;
切换到最后一个使用的窗格※ + 上下键
上一个及下一个分隔窗格※ + 空格键
切换窗格布局
tmux 插件
之前还用过一段时间 Tmux 的插件,后来发现需要长期停留在 Tmux 的时候很少,所以后面没用了,
配置文件还是放出来留给有缘人:
# plugins
# tmux plugin manager 插件管理
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
# 保存布局插件,tmux-prefix + ctrl+s/tmux-prefix + ctrl+r 保存 / 恢复
set -g @plugin 'tmux-plugins/tmux-resurrect'
# 自动保存插件
set -g @plugin 'tmux-plugins/tmux-continuum'
# tmux-resurrect 配置
# 恢复 shell 的历史记录, 只有无前台任务运行的窗格 才能被保存
set -g @resurrect-save-bash-history 'on'
# 恢复窗格内容, 目前使用该功能时,请确保 tmux 的 default-command 没有包含 && 或者 || 操作符,
# 否则将导致 bug。(查看 default-command 的值,请使用命令 tmux show -g default-command。)
set -g @resurrect-capture-pane-contents 'on'
# 恢复 vim 会话
set -g @resurrect-strategy-vim 'session'
# set -g @resurrect-save 'S'
# set -g @resurrect-restore 'R'
# tmux-continuum 配置
# 开启自动恢复
set -g @continuum-restore 'on'
# 设置备份间隔(分钟,0 为不自动备份)
set -g @continuum-save-interval '240'
# 状态栏查看备份状态
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
set -g status-right 'Continuum status: #{continuum_status}'
run '/etc/.tmux/plugins/tpm/tpm'
tpm 通过 git 安装:
git clone https://github.com/tmux-plugins/tpm /etc/.tmux/plugins/tpm
安装 tpm 后需要重新读取配置文件生效:
- 进入 tmux,输入
※ + :
进入命令模式; - 再输入
source-file ~/.tmux.conf
手动刷新配置文件; - 最后输入
※ + shift + u
进入 tpm 插件升级页面进行升级。