使用tmux分屏(既可以左右分屏,也可以上下分屏)
(1)安装工具
在ubuntu系统中使用sudo apt-get install tmux安装tmux工具
(2)使用工具
1,输入命令tmux使用工具
2,上下分屏:ctrl + b 再按 "
3,左右分屏:ctrl + b 再按 %
4,切换屏幕:ctrl + b 再按o
5,关闭一个终端:ctrl + b 再按x
6,上下分屏与左右分屏切换: ctrl + b 再按空格键
终端分屏tmux
分屏效果
tmux并不是一个类似bash的终端,而是管理在管理会话,使用tmux后,其他配置还是和bash或zsh一样。
效果如图:
安装tmux
在centOS中,安装tmux只需要一句话
yum install tmux
等待片刻即可安装完成,安装完后,使用的依然是默认的bash或自己配置的zsh。执行下一步的打开窗口后,才可以进行分屏,多窗口等操作。
打开一个新的会话,使用命令
tmux
即可打开一个新的会话,在打开的tmux创建的窗口的时候,才可以分屏,多个窗口等操作。
在博客园看到这样一张图片,对tmux解释的很详细
用tmux可以新建多个窗口,每次只能显示一个窗口,新建的其他窗口进入后台,看不见,但却存在。
一个窗口中可以分割出多个窗格,多个窗格显示在同一个窗口,这就是常见的分屏。
tmux的基本命令
在bash或zsh中输入tmux打开新的会话。可以配置在bash后zsh的配置文件中,启动bash自动运行tmux命令
默认前缀ctrl+b(命令中替换prefix)
tmux中,使用分割窗格等需要使用快捷键。使用每个快捷键前,会先键入前缀, 使得tmux开始监听后面的命令。没有键入前缀,直接使用命令是不会触发tmux。
目前经常使用:
会话:每次断开连接没有关闭tmux,再次连接的时候,运行tmux命令会新建一个会话。当进入bash后,使用tmux ls可以查看后台未关闭的会话。进入会话后,可以使用快捷键,列出存在的会话。
会话命令 | 作用 |
---|---|
tmux ls | 显示所有的会话 |
tmux kill-session -t s1 | 关闭会话s1 |
tmux kill-session -a -t s1 | 关闭除s1外的所有会话 |
tmux kill-server | 关闭所有会话 |
prefix s | 在会话中,列出会话,可进行切换 |
窗格:每个窗口可以显示多个窗格
窗格命令 | 作用 |
---|---|
prefix % | 水平方向创建窗格 |
prefix " | 垂直方向创建窗格 |
prefix Up,Down,Left,Right | 根据箭头方向切换窗格 |
prefix }{ | 与下上一个窗格交换位置 |
prefix x | 关闭当前窗格 |
prefix space(空格键) | 重新排列当前窗口下的所有窗格 |
窗口:每个会话,可以包含多个窗口。
窗口命令 | 作用 |
---|---|
prefix c | 创建一个新窗口 |
prefix w | 列出所有窗口,可进行切换 |
prefix np | 进入下上一个窗口 |
prefix 0~9 | 选择编号0~9对应的窗口 |
prefix & | 关闭当前窗口 |
窗格管理**
prefix % 水平方向创建窗格
prefix " 垂直方向创建窗格
prefix Up|Down|Left|Right 根据箭头方向切换窗格
prefix q 显示窗格编号
prefix o 顺时针切换窗格
prefix } 与下一个窗格交换位置
prefix { 与上一个窗格交换位置
prefix x 关闭当前窗格
prefix space(空格键) 重新排列当前窗口下的所有窗格
prefix ! 将当前窗格置于新窗口
prefix Ctrl+o 逆时针旋转当前窗口的窗格
prefix t 在当前窗格显示时间
prefix z 放大当前窗格(再次按下将还原)
prefix i 显示当前窗格信息
会话管理
*常用命令*
tmux new 创建默认名称的会话(在tmux命令模式使用new命令可实现同样的功能,其他命令同理,后文不再列出tmux终端命令)
tmux new -s mysession 创建名为mysession的会话
tmux ls 显示会话列表
tmux a 连接上一个会话
tmux a -t mysession 连接指定会话
tmux rename -t s1 s2 重命名会话s1为s2
tmux kill-session 关闭上次打开的会话
tmux kill-session -t s1 关闭会话s1
tmux kill-session -a -t s1 关闭除s1外的所有会话
tmux kill-server 关闭所有会话
常用快捷键
prefix s 列出会话,可进行切换
prefix $ 重命名会话
prefix d 分离当前会话
prefix D 分离指定会话
窗口管理
prefix c 创建一个新窗口
prefix , 重命名当前窗口
prefix w 列出所有窗口,可进行切换
prefix n 进入下一个窗口
prefix p 进入上一个窗口
prefix l 进入之前操作的窗口
prefix 0~9 选择编号0~9对应的窗口
prefix . 修改当前窗口索引编号
prefix ' 切换至指定编号(可大于9)的窗口
prefix f 根据显示的内容搜索窗格
prefix & 关闭当前窗口
其他命令
tmux list-key 列出所有绑定的键,等同于prefix ?
tmux list-command 列出所有命令
zsh的安装和配置可以参考 https://www.cnblogs.com/to-red/p/11580160.html
centOS安装zsh时,使用命令
yum install zsh
Ubuntu安装zsh时,使用命令
apt-get install zsh
如果需要在每次连接时候,都启动一个新的tmux
可以在zsh的配置文件/.zshrc或bash的/.bashrc配置文件的最后一行加上启动tmux的命令(使用的是哪个终端,编辑哪个终端的配置文件,查看自己使用的终端的命令echo $SHELL)
例如
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
tmux
如果需要在每次连接时候,都打开上次断开连接前的tmux
在zsh/bash的配置文件中的最后,添加一行命令
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
tmux a
-------------------------------------------------------------------------------------------------------------------------
Tmux是很强大的一个终端工具。
在接触它的时候项目需要实现自动分屏,但它的文档和使用教程都只介绍了如何用快捷键分屏操作。后面试过模拟键盘进行操作来自动分屏,但模拟的键盘很容易出现bug,所以想要实现精准的控制自动分出想要的布局,只能通过指令来实现。
这里只介绍tmux的分屏(pane)有关的指令:
左右分屏: tmux split-pane -h 对应快捷键: Ctrl+b %
上下分屏:tmux spilt-pane -v 对应快捷键: Ctrl+b "
查看各个分屏(pane)的编号: 快捷键: Ctrl + b q
选择指定 pane :确定编号后(这里假设要选择0号pane): tmux select-pane -t 编号
关闭分屏: 快捷键 Ctrl + b x
设置pane的尺寸:resize-pane -t 编号 -x width -y width 快捷键:Ctrl+b 方向键
下面为网上能搜索到的一些基本指令:
vi emacs 功能
^ M-m 反缩进
Escape C-g 清除选定内容
Enter M-w 复制选定内容
j Down 光标下移
h Left 光标左移
l Right 光标右移
L 光标移到尾行
M M-r 光标移到中间行
H M-R 光标移到首行
k Up 光标上移
d C-u 删除整行
D C-k 删除到行末
$ C-e 移到行尾
: g 前往指定行
C-d M-Down 向下滚动半屏
C-u M-Up 向上滚动半屏
C-f Page down 下一页
w M-f 下一个词
p C-y 粘贴
C-b Page up 上一页
b M-b 上一个词
q Escape 退出
C-Down or J C-Down 向下翻
C-Up or K C-Up 向下翻
n n 继续搜索
? C-r 向前搜索
/ C-s 向后搜索
0 C-a 移到行首
Space C-Space 开始选中
C-t 字符调序
启动新会话:
tmux [new -s 会话名 -n 窗口名]
恢复会话:
tmux at [-t 会话名]
列出所有会话:
tmux ls
关闭会话:
tmux kill-session -t 会话名
关闭所有会话:
tmux ls | grep : | cut -d. -f1 | awk '{print substr($1, 0,
length($1)-1)}' | xargs kill
调整窗口排序
swap-window -s 3 -t 1 交换 3 号和 1 号窗口
swap-window -t 1 交换当前和 1 号窗口
move-window -t 1 移动当前窗口到 1 号