基本操作
1
2
3
4
| tmux new -s SESSION_NAME # 新建会话
tmux new -s SESSION_NAME -d # 新建会话并放入后台
tmux ls # 列出所有会话
tmux attach -t SESSION_NAME # 进入某会话
|
命令列表
默认情况下,tmux的前导命令开关是Ctrl+b,按了Ctrl+b后再按下面的命令,即执行相应操作:
会话类
| 键位 |
操作描述 |
| ? |
显示所有快捷键,按q退出 |
| d |
脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话 |
| D |
选择要脱离的会话;在同时开启了多个会话时使用 |
| s |
选择并切换会话;在同时开启了多个会话时使用 |
| : |
进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器 |
| [ |
进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出 |
窗口类
| 键位 |
操作描述 |
| c |
创建新窗口 |
| & |
关闭当前窗口 |
| 数字键 |
切换至指定窗口 |
| p |
切换至上一窗口 |
| n |
切换至下一窗口 |
| l |
在前后两个窗口间互相切换 |
| w |
通过窗口列表切换窗口 |
| , |
重命名当前窗口;这样便于识别 |
| . |
修改当前窗口编号;相当于窗口重新排序 |
| ! |
将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板 |
面板类
| 键位 |
操作描述 |
| ” |
将当前面板平分为上下两块 |
| % |
将当前面板平分为左右两块 |
| x |
关闭当前面板 |
| o |
在当前窗口中选择下一面板 |
| q |
显示面板编号 |
其他
如果不想使用默认tmux server,或者同一用户想起多个tmux实例,可以使用-S参数指定不同的unix socket:
1
| tmux -S /path/to/another/unix/socket-file
|
在tmux里使用zsh有时会导致窗口名称会不断变化,这需要修改下~/.zshrc文件:
1
| DISABLE_AUTO_TITLE=true
|
可编程
tmux最强大的地方还在于他的可编程性,用tmux list-commands可以看到tmux所有支持的命令。以我自己常执行的一个脚本为例,我开机后常常需要启动一系列服务便于开发, 但当我不开发时开电脑又不需要启动,所以放到开机自启动脚本里是不合适的,所以这里用tmux来批量起最合适了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| #!/bin/zsh
# start tmux
session=MAC
tmux new -s "$session" -d
tmux rename-window -t "$session:0" daemon
# start redis-server
tmux send -t "$session:daemon" 'redis-server' Enter
tmux split-window -h -t "$session:daemon"
# start mongo
tmux send -t "$session:daemon" 'mongod --dbpath /Users/jason/local/var/mongodb-data' Enter
# start nginx
tmux split-window -t "$session:daemon" '/Users/jason/local/nginx/sbin/nginx'
tmux select-pane -L -t "$session:daemon"
tmux split-window -t "$session:daemon"
# start firefox with pentadactyl
tmux send -t "$session:daemon" '/Applications/Firefox.app/Contents/MacOS/firefox -pentadactyl +u NONE' Enter
tmux select-pane -R -t "$session:daemon"
# for develop project
tmux neww -a -n dev -t "$session"
tmux send -t "$session:dev" 'cd /Users/jason/repository/backend' Enter
tmux split-window -t "$session:dev"
tmux send -t "$session:dev" 'cd /Users/jason/repository/frontend' Enter
|
这个脚本启动一个名为MAC的tmux session,并新建了两个窗口,在第一个窗口里开了4个面板,分别启动了nginx, redis, mongo, firefox。其中,开启窗口/面板时同时执行命令,该窗口/面板会在命令执行结束后自动关闭,所以第一个窗口最后实际只有3个面板;第二个窗口启动并切换到我正则开发的工程。
具体命令的使用可以参照该示例和man手册理解。
enjoy tmux!