to be
a problem slover

tmux cookbook

tmux cookbook

tmux是一个终端多路复用工具,使用它可以在一个窗口里打开多个终端,ssh连接到远程服务器时特别好用。

tmux概念

  • tmux会在服务器启动一个tmux server
  • 一个tmux server可有多个tmux session
  • session里面有windows
  • windows里面有panel
  • ssh掉线重登录tmux中的现场还在
  • tmux之所以能保存现场,因为其进程一直在后台运行

tmux安装

ubuntu安装

apt install tmux

centos安装

yum install tmux安装的是1.8版,很老的版本,可以使用以下脚本安装2.8稳定版
install-tmux2.8.sh (https://gist.github.com/pokev25/4b9516d32f4021d945a140df09bf1fde)

# Install tmux 2.8 on Centos

# install deps
yum install gcc kernel-devel make ncurses-devel

# DOWNLOAD SOURCES FOR LIBEVENT AND MAKE AND INSTALL
curl -LOk https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
tar -xf libevent-2.1.8-stable.tar.gz
cd libevent-2.1.8-stable
./configure --prefix=/usr/local
make
make install

# DOWNLOAD SOURCES FOR TMUX AND MAKE AND INSTALL

curl -LOk https://github.com/tmux/tmux/releases/download/2.8/tmux-2.8.tar.gz
tar -xf tmux-2.8.tar.gz
cd tmux-2.8
LDFLAGS="-L/usr/local/lib -Wl,-rpath=/usr/local/lib" ./configure --prefix=/usr/local
make
make install

# pkill tmux
# close your terminal window (flushes cached tmux executable)
# open new shell and check tmux version
tmux -V

查看版本

tmux -V

prefix键

进入tmux后,所有的tmux命令前都需要先敲prefix键
默认的prefix = ctrl + b
如新建tmux窗口,命令为prefix + c,实际在键盘需要按的键为,先按ctrl + b,再按c
因为ctrl + b按起来有点麻烦,所以建议按下面的配置文件来配置,使`号(键盘数字1左边)成为 prefix键

推荐配置

tmux的默认配置文件位置为~/.tmux.conf

# setw -g mode-keys vi

# 使用`代替ctrl+b,按两下`输出`字符
unbind ^b
bind-key ` send-prefix
set -g prefix `

# `+r 应用tmux.conf文件
bind r source-file ~/.tmux.conf \; display-message "Config reloaded"

# 切分面板,-横切,|竖切
# unbind '"'
bind - splitw -v -c '#{pane_current_path}'
# unbind %
bind | splitw -h -c '#{pane_current_path}'

# 支持鼠标选中和调整窗口
set -g mouse-resize-pane on
set -g mouse-select-pane on
set -g mouse-select-window on

# vim编辑支持滚轮翻页
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"  
bind -n WheelDownPane select-pane -t= \; send-keys -M 
# set-option -g mouse on

# 绑定kjhl键为面板切换的上下左右键
bind -r k select-pane -U # 绑定k为↑
bind -r j select-pane -D # 绑定j为↓
bind -r h select-pane -L # 绑定h为←
bind -r l select-pane -R # 绑定l为→

# 绑定KJHL键为面板上下左右调整边缘的快捷指令
bind -r K resizep -U 10 # 绑定K为往↑调整面板边缘10个单元格
bind -r J resizep -D 10 # 绑定J为往↓调整面板边缘10个单元格
bind -r H resizep -L 10 # 绑定H为往←调整面板边缘10个单元格
bind -r L resizep -R 10 # 绑定L为往→调整面板边缘10个单元格

# 设置tmux的延迟,文档说当有干扰的时候可以设置这个参数,比如影响vim编辑的时候
set -s escape-time 1

热加载配置

prefix + : 进入命令模式然后输入
source-file ~/.tmux.conf

按以上配置,后续只要按prefix + r,无需退出tmux,即可重新加载配置

系统操作

command usage
prefix + ? 列出所有快捷键;按q返回
prefix + d 脱离当前会话,返回Shell界面
prefix + D 选择要脱离的会话;在同时开启了多个会话时使用
prefix + Ctrl+z 挂起当前会话
prefix + : 进入命令行模式,此时可以输入tmux支持的命令
prefix + [ 进入复制模式;此时的操作与vi相同,按q/Esc退出

Session管理

新建session并命名

tmux new -s myname

打开已存在的session

tmux a -t session_name  

断开session

# 方式一
exit   # 如果只有单个tmux窗口,这样退出后tmux session就不存在了

# 方式二
prefix + d # d = detach, session保留

查看session列表

tmux ls
0: 1 windows (created Wed Dec  5 16:14:47 2018) [232x56]
2: 2 windows (created Wed Dec  5 19:50:16 2018) [265x58]

删除session

$ tmux ls
0: 2 windows (created Fri Jan 10 07:39:41 2020) [137x24]
1: 4 windows (created Fri Jan 10 07:40:09 2020) [137x24]
2: 1 windows (created Fri Jan 10 07:40:38 2020) [137x24]
$ tmux kill-session -t 1
$ tmux kill-session -t 2
$ tmux ls
0: 2 windows (created Fri Jan 10 07:39:41 2020) [137x24]

窗口(如同浏览器tab)

新建窗口

prefix + c

切换窗口

prefix + [0~9]

重命名窗口

prefix + ,

删除窗口

prefix + &

窗格(一个大窗分成几个格)

水平分隔窗格

prefix + -

垂直分隔窗格

prefix + |

移动窗格

prefix + hjkl
prefix + ↑↓←→

缩放窗格

prefix + z (z for zoom) # 有多个窗格的情况下,聚焦正在工作的窗格  

置换窗格

prefix + { # 向前置换
prefix + } # 向后置换

调整窗格边界

prefix + KJHL # 上下左右调整面板边界

嵌套tmux

不建议嵌套使用tmux,但是有时候会有从本地tmux ssh到远程server,然后又在远程server也使用tmux的情况,这样就会产生嵌套了。
如果恰好两个tmux的prefix键都是一样的,那么使用prefix键时将只对外层的tmux有效,没办法使用里层的tmux。
要解决这个问题,按两次prefix键即可(第二层按2次,第三层按3次,以此类推)。

自动使用tmux

将以下配置加入服务器的~/.bash_profile~/.zsh_profile文件中, 只要一登录服务器就会自动使用tmux(Mac也适用)

if [ -z "$TMUX" ]; then
    tmux attach -t 0 || tmux new -s 0
fi

Last Updated on

赞(0) 打赏
欢迎转载,注明出处:刘世明的博客 » tmux cookbook

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下作者

支付宝扫一扫打赏

微信扫一扫打赏