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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
|
---
category: tool
tool: tmux
filename: LearnTmux-cn.txt
contributors:
- ["mdln", "https://github.com/mdln"]
translators:
- ["Arnie97", "https://github.com/Arnie97"]
lang: zh-cn
---
[tmux](http://tmux.sourceforge.net)
is a terminal multiplexer: it enables a number of terminals
to be created, accessed, and controlled from a single screen. tmux
may be detached from a screen and continue running in the background
then later reattached.
```
tmux [command] # 运行一条命令
# 如果忽略 'tmux' 之后的命令,将会建立一个新的会话
new # 创建一个新的会话
-s "Session" # 创建一个named会话
-n "Window" # 创建一个named窗口
-c "/dir" # 在指定的工作目录中启动会话
attach # 连接到上一次的会话(如果可用)
-t "#" # 连接到指定的会话
-d # 断开其他客户端的会话
ls # 列出打开的会话
-a # 列出所有打开的会话
lsw # 列出窗口
-a # 列出所有窗口
-s # 列出会话中的所有窗口
lsp # 列出窗格
-a # 列出所有窗格
-s # 列出会话中的所有窗格
-t # List app panes in target
kill-window # 关闭当前窗口
-t "#" # 关闭指定的窗口
-a # 关闭所有窗口
-a -t "#" # 关闭除指定窗口以外的所有窗口
kill-session # 关闭当前会话
-t "#" # 关闭指定的会话
-a # 关闭所有会话
-a -t "#" # 关闭除指定会话以外的所有会话
```
## 快捷键
# 通过“前缀”快捷键,可以控制一个已经连入的tmux会话。
```
----------------------------------------------------------------------
(C-b) = Ctrl + b # 在使用下列快捷键之前,需要按这个“前缀”快捷键
(M-1) = Meta + 1 或 Alt + 1
----------------------------------------------------------------------
? # 列出所有快捷键
: # 进入tmux的命令提示符
r # 强制重绘 the attached client
c # 创建一个新窗口
! # Break the current pane out of the window.
% # 将当前窗格分为左右两半
" # 将当前窗格分为上下两半
n # 切换到下一个窗口
p # 切换到上一个窗口
{ # 将当前窗格与上一个窗格交换
} # 将当前窗格与下一个窗格交换
s # 在交互式界面中,选择并连接至另一个会话
w # 在交互式界面中,选择并激活一个窗口
0 至 9 # 选择 0 到 9 号窗口
d # 断开当前客户端
D # 选择并断开一个客户端
& # 关闭当前窗口
x # 关闭当前窗格
Up, Down # 将焦点移动至相邻的窗格
Left, Right
M-1 到 M-5 # 排列窗格:
# 1) even-horizontal
# 2) even-vertical
# 3) main-horizontal
# 4) main-vertical
# 5) tiled
C-Up, C-Down # 改变当前窗格的大小,每按一次增减一个单位
C-Left, C-Right
M-Up, M-Down # 改变当前窗格的大小,每按一次增减五个单位
M-Left, M-Right
```
### 配置 ~/.tmux.conf
tmux.conf 可以在 tmux 启动时自动设置选项,类似于 .vimrc 或 init.el 的用法。
```
# tmux.conf 示例
# 2014.10
### 通用设置
###########################################################################
# 启用 UTF-8 编码
setw -g utf8 on
set-option -g status-utf8 on
# 命令回滚/历史数量限制
set -g history-limit 2048
# Index Start
set -g base-index 1
# 启用鼠标
set-option -g mouse-select-pane on
# 重新加载配置文件
unbind r
bind r source-file ~/.tmux.conf
### 快捷键设置
###########################################################################
# 取消默认的前缀键 C-b
unbind C-b
# 设置新的前缀键
set-option -g prefix `
# 再次按下前缀键时,回到之前的窗口
bind C-a last-window
bind ` last-window
# 按下F11/F12,可以选择不同的前缀键
bind F11 set-option -g prefix C-a
bind F12 set-option -g prefix `
# Vim 风格的快捷键绑定
setw -g mode-keys vi
set-option -g status-keys vi
# 使用 vim 风格的按键在窗格间移动
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# 循环切换不同的窗口
bind e previous-window
bind f next-window
bind E swap-window -t -1
bind F swap-window -t +1
# 较易于使用的窗格分割快捷键
bind = split-window -h
bind - split-window -v
unbind '"'
unbind %
# 在嵌套使用 tmux 的情况下,激活最内层的会话,以便向其发送命令
bind a send-prefix
### 外观主题
###########################################################################
# 状态栏颜色
set-option -g status-justify left
set-option -g status-bg black
set-option -g status-fg white
set-option -g status-left-length 40
set-option -g status-right-length 80
# 窗格边框颜色
set-option -g 窗格-active-border-fg green
set-option -g 窗格-active-border-bg black
set-option -g 窗格-border-fg white
set-option -g 窗格-border-bg black
# 消息框颜色
set-option -g message-fg black
set-option -g message-bg green
# 窗口状态栏颜色
setw -g window-status-bg black
setw -g window-status-current-fg green
setw -g window-status-bell-attr default
setw -g window-status-bell-fg red
setw -g window-status-content-attr default
setw -g window-status-content-fg yellow
setw -g window-status-activity-attr default
setw -g window-status-activity-fg yellow
### 用户界面
###########################################################################
# 通知方式
setw -g monitor-activity on
set -g visual-activity on
set-option -g bell-action any
set-option -g visual-bell off
# 自动设置窗口标题
set-option -g set-titles on
set-option -g set-titles-string '#H:#S.#I.#P #W #T' # 窗口编号,程序名称,是否活动
# 调整状态栏
set -g status-left "#[fg=red] #H#[fg=green]:#[fg=white]#S#[fg=green] |#[default]"
# 在状态栏中显示性能计数器
# 需要用到 https://github.com/thewtex/tmux-mem-cpu-load
set -g status-interval 4
set -g status-right "#[fg=green] | #[fg=white]#(tmux-mem-cpu-load)#[fg=green] | #[fg=cyan]%H:%M #[default]"
```
### 参考资料
[Tmux 主页](http://tmux.sourceforge.net)
[Tmux 手册](http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1?query=tmux)
[Gentoo Wiki](http://wiki.gentoo.org/wiki/Tmux)
[Archlinux Wiki](https://wiki.archlinux.org/index.php/Tmux)
[如何在 tmux 状态栏中显示 CPU / 内存占用百分比](https://stackoverflow.com/questions/11558907/is-there-a-better-way-to-display-cpu-usage-in-tmux)
|