为什么使用 tmux

在操作 linux 的使用,使用 ssh 连接终端是很常见的事情,但是有几个问题

  • 无法切换。比如 ssh 上去一台机器,然后执行正常操作,因为要查看目录,或者其他操作,需要频繁的切换到其他目录然后切换回来。一般的解决方式是开启多个终端。
  • 如果在 ssh 远程执行一个耗时长的命令,容易因为 ssh 断开而中断。
  • 断开 ssh 后,下次再连接又得重新 cd 到之前的目录,打开之前的文件。
    tmux 就可以解决这些问题。ssh 上一台服务器,在上面开启 tmux,然后正常像平时 ssh 操作一样。需要查看其它目录,直接通过 tmux 建立一个新的窗口,操作完再切回当前窗口即可。ssh 断开后,tmux 会帮你在服务器上继续维护当前的会话状态,下次 ssh 上来打开 tmux,所有的窗口,文件都和上次关不一样。同理,长时间的命令也不会受 ssh 断开影响。

安装

直接安装

sudo apt-get install tmux

编译安装新版

sudo apt-get update
sudo apt-get install -y libevent-dev libncurses-dev make
cd /tmp
wget https://github.com/tmux/tmux/releases/download/2.7/tmux-2.7.tar.gz
tar xvzf tmux-2.7.tar.gz
cd tmux-2.7/
./configure && make
sudo make install
cd ..
rm -rf ./tmux-2.7*

有时需要手动在当前目录下复制 tmux 二进制文件。

基本概念

session:会话,可以理解一个 tmux 实例。
window:窗口,一个 tmux session 可以有多个窗口,tmux 的窗口类似常见的 tab 页。
pane:面板,默认创建窗口之后有一个面板,如果分屏之后则窗口有了多个面板。

基本操作

创建一个 session

// 直接 tmux 也可以创建一个 session,但是名字是默认的。
tmux new -s <session_name>

暂存 session

可以将 session 临时保存,只要不重启机器,session 就会保存着

tmux detach

打开 session

tmux a -t <session_name>

操作速查表

https://tmuxcheatsheet.com/

tmux 配置文件

tmux 的配置文件在 ~/.tmux.conf
在 tmux 中更新配置,先按下Ctrl+b指令前缀,然后按下系统指令:,进入到命令模式后输入source-file ~/.tmux.conf,回车后生效。

// 快速选择面板
// -r 表示可以重复按键。比如 prefix r r 就代表 prefix r prefix r
// 其中按键延时可以通过 repeat-time 来设置。一般为 500ms
bind -r h select-pane -L
bind -r l select-pane -R
bind -r h select-pane -U
bind -r j select-pane -D

// 向终端发送 prefix-key
// send-prefix

// 关闭自动重命名
set -wg automatic-rename off

// 使用当前 pane 路径创建新的 window,pane
bind -c new-window -c "#{pane_current_path}"
bind % split-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"

// 设置文本复制模式
setw -g mode-keys vi

Tmux resurrect

Tmux resurrect 可以支持在电脑重启之后恢复 tmux 的状态。
安装过程如下

cd ~/.tmux
mkdir plugins
cd plugins
git clone https://github.com/tmux-plugins/tmux-resurrect.git

安装后在 ~/.tmux.conf 中增加一行配置

run-shell ~/.tmux/plugins/tmux-resurrect/resurrect.tmux

至此安装成功,按下 prefix + r 重载tmux配置。
Tmux Resurrec提供如下两个操作:

  • 保存,快捷指令是 prefix + Ctrl + s,tmux状态栏在保存开始,保存后分别提示”Saving…”,”Tmux environment saved !”。
  • 恢复,快捷指令是 prefix + Ctrl + r,tmux状态栏在恢复开始,恢复后分别提示”Restoring…”,”Tmux restore complete !”。
    保存时,tmux会话的详细信息会以文本文件的格式保存到 ~/.tmux/resurrect 目录,恢复时则从此处读取,由于数据文件是明文的,因此你完全可以自由管理或者编辑这些会话状态文件(如果备份频繁,记得定期清除历史备份)。

不使用配置启动 tmux

用的时候用户目录下已经有别人配置了的 .tmux.conf,但是与自己的使用习惯不一样,可以自己另外指定配置启动。

tmux -f my.conf new -s mysession

# 或者使用默认配置
tmux -f /dev/null new -s mysession

真彩色开启

移动窗口

进入命令模式(默认 ctrl+b :)

# 将 3 号窗口和 1 号窗口交换位置
swap-window -s 3 -t 1
# 将当前窗口和 0 号窗口交换位置
swap-window -t 0

支持鼠标复制

#开启鼠标支持 
set-option -g mouse on

参考

https://segmentfault.com/a/1190000008188987