TMUX安装配置

安装

install_tmux.shview raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash

yum -y remove tmux
yum -y install gcc kernel-devel make ncurses-devel

curl -OL https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
tar -xvzf libevent-2.0.22-stable.tar.gz
cd libevent-2.0.22-stable
./configure --prefix=/usr/local
make && make install

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

功能

tmux类似screen,但是分屏更加强大

tmux默认的key

ctrl+b

几个概念

会话

窗口

pane

一个会话下可以有多个窗口(c-b w),一个窗口下可以有多个pane(c-b “, c-b %)

几个常用的快捷键

快捷键 描述
C-b c 创建一个新的窗口
C-b n 切换到下一个窗口
C-b p 切换到上一个窗口
C-b l 最后一个窗口,和上一个窗口的概念不一样哟,谁试谁知道
c-b w 通过上下键选择当前窗口中打开的会话
C-b 数字 直接跳到你按的数字所在的窗口
C-b & 退出当前窗口
C-b d 临时断开会话 断开以后,还可以连上的哟
C-b “ 分割出来一个窗口
C-b % 分割出来一个窗口
C-b o 在小窗口中切换
C-b (方向键) pane切换
C-b ! 关闭所有小窗口
C-b x 关闭当前光标处的小窗口
C-b t 钟表
C-b pageup/pagedo
C-b Tab 开启关闭侧边栏(需要插件支持)

配置文件

  • /etc/tmux.conf

  • ~/.tmux.conf

  • C-b :->source ~/.tmux.conf->配置生效

.tmux.confview raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
unbind C-a
set -g prefix C-b
set -g mouse on
## 使用ctrl-b : -> set mouse off 关闭使用鼠标
setw -g mode-keys vi
setw -g utf8 on
set -g base-index 1
set -g pane-base-index 1
set -g monitor-activity off
set -g monitor-silence 0
set -g bell-action none

set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sidebar'
set -g @plugin 'tmux-plugins/tmux-logging'
run '~/.tmux/plugins/tpm/tpm'

常用命令

1
2
3
4
## 新建一个新的tmux
tmux new-session -s name
## -2 是支持256色,否则vim的256色不支持
tmux -2 -f ~/.tmux.conf attach-session -t name

快速创建session小脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
## 创建一个会话
tmux new-session -d -s $USER
## 重命名会话的第一个窗口
tmux rename-window -t $USER 'dev'
## 分割第一个窗口
tmux split-window -h -t $USER
## 分割第一个窗口中的第二个pane
tmux split-window -v -t $USER:0.1
## 在第一个窗口中的第一个pane运行top命令
tmux send-keys -t $USER:0.0 'top' C-m
## 创建一个新的窗口
tmux new-window -n 'stable' -t $USER
## 分割新的窗口
tmux split-window -h -t $USER:1

创建并分割窗口脚本

包含一个发送命令窗口和N个接收命令窗口

myTmux.shview raw
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/bin/bash

## -----------------------------------
## 生成如下的TMUX窗口
## pane1是发送命令窗口
## 其他panes(接近等高)是接收命令窗口
## -----------------------------------
##
## +-------------+------+
## | 0 |CMD: |
## +-------------+ |
## | 3 | 1 |
## +-------------+ |
## | 2 | |
## +-------------+------+
##

## 配置
PANE_NUM=4

## -------------------------
## 内部函数
## -------------------------
LOCAL_FILE=$0

## 创建tmux
function create(){
tmux new-session -d -s update
tmux split-window -h -t update -p 30
for((index=0; index<$(($PANE_NUM-1));index++)); do
percent=$(( 100 / ($PANE_NUM - $index) ))
tmux split-window -v -t update:0.0 -p $percent
done
tmux send-keys -t update:0.1 "bash ${LOCAL_FILE}" C-m
tmux send-keys -t update:0.1 "bash ${LOCAL_FILE} send all 'clear'" C-m
tmux send-keys -t update:0.1 "bash ${LOCAL_FILE} confirm" C-m
}

## 发送消息
function send(){
panes=$1
cmd="$2"
case $panes in
"all")
send_all "${cmd}";;
*)
send_one "$panes" "$cmd";;
esac
}

function send_one(){
pane=$1
cmd="$2"
tmux send-keys -t update:0.$pane "${cmd}"
}

function send_all(){
cmd="$1"
for((index=0; index<=$PANE_NUM; index++));do
if [[ $index -ne 1 ]]; then
tmux send-keys -t update:0.$index "${cmd}"
fi
done
}

## 确认
function confirm(){
send all "C-m"
}

## 帮助文件
function help(){
echo "-------------------------------"
echo " create -- 创建一个会话"
echo " send pane cmd -- 发送一个命令"
echo " pane 可以是 all or pane编号"
echo " cmd 用引号括起来"
echo " ctrl-b q 显示pane编号"
echo " confirm -- 命令确认"
echo "-------------------------------"
}

case $1 in
"create")
create;;
"send")
send "$2" "$3";;
"confirm")
confirm;;
*)
help;;
esac