tmux系列:3、tmux窗口和窗格
文章目录
1. 创建新窗口
可以使用C-b c
键绑定在附加的会话中创建一个新窗口,该绑定运行new-window
命令。新窗口是在第一个可用的索引处创建的——因此第二个窗口的索引为1。新窗口成为会话的当前窗口。
如果窗口列表中有任何空白,它们将由新窗口填充。因此,如果有索引为0和2的窗口,下一个新窗口将作为索引1创建。
new-window命令有一些有用的标志,可以在命令提示符中使用:
- -d标志创建窗口,但不使其成为当前窗口。
- -n允许为新窗口指定一个名称。例如,使用命令提示符创建一个名为mynewwindow的窗口,而不将其设置为当前窗口:
:neww -dnmynewwindow
- -t标志指定窗口的目标。命令目标有一个特殊的语法,但为了简单地使用新窗口,它仅仅提供一个窗口索引就足够了。这将在索引999创建一个窗口:
:neww -t999
在新窗口中运行的命令可以像new-session一样被赋予new-window。例如,创建一个运行top(1)的新窗口:
:neww top
2. 拆分窗口
窗格是通过分割窗口创建的。这是通过split-window命令完成的,该命令默认绑定到两个键:
C-b %
将当前窗格水平分割成两个,产生两个相邻的窗格,一个在左边,一个在右边。C-b "
将当前的窗格垂直地分成两个,产生两个窗格,一个在另一个之上。
每次将一个窗格划分为两个时,每个窗格都可以使用相同的键绑定再次划分,直到窗格变得太小为止。
Split-window
有几个有用的标志:
-h
做水平分割,-v
做垂直分割。-d
不会将活动窗格更改为新创建的窗格。-f
使一个新窗格跨越整个窗口的宽度或高度,而不是被限制为窗格被分割的大小。-b
将新窗格放在被分割窗格的左侧或上方,而不是右侧或下方。
在新窗格中运行的命令可以像new-session
和new-window
一样被赋予split-window
。
3. 切换窗口
有几个键绑定可以改变会话的当前窗口:
C-b 0
变成窗口0,C-b 1
变成窗口1,直到窗口C-b 9
变成窗口9。C-b '
提示输入一个窗口索引并更改该窗口。C-b n
按编号改变到窗口列表中的下一个窗口。所以在窗口1中按C-b n
会变成窗口2如果它存在的话。C-b p
按编号改变窗口列表中的上一个窗口。C-b l
更改到最后一个窗口,这是最后一个窗口,当前窗口在现在的窗口之前。
这些都是select-window
命令的变体。
4. 切换活动窗格
通过这些键绑定,活动窗格可以在窗口中的窗格之间更改:
C-b up
,C-b down
,C-b left
和C-b right
更改为活动窗格的上,下,左或右窗格。这些键环绕着窗口,所以按下C-b down
在底部的窗格上就会变成顶部的窗格。C-b q
会在短时间内将方格号码和尺寸打印在方格的顶部。在数字键消失之前按下其中一个会将活动窗格更改为所选窗格,因此C-b q 1
将更改为窗格编号1。C-b -o
按窗格编号移动到下一个窗格,C-b C-o
与活动窗格交换该窗格,因此它们在窗口中交换位置和大小。
它们使用“选择窗格”和“显示窗格”命令。
窗格的编号不是固定的,相反,窗格是根据其在窗口中的位置进行编号的,所以如果数字为0的窗格与数字为1的窗格交换,则数字和窗格本身都会被交换。
5. 选择会话、窗口和窗格
Tmux包括一种模式,可以从树中选择会话、窗口或窗格,这被称为树模式。它可以用来浏览会话,窗口和窗格;若要更改所附的会话、当前窗口或活动窗格;杀死会话、窗口和窗格;或者通过标记将一个命令同时应用于多个。
有两个键绑定可以进入树模式:C-b s
开始只显示会话,并选择了附加的会话;C-b w
以扩展会话开始,因此显示窗口,并选择所附会话中的当前窗口。
树模式将窗口分成两个部分:上半部分是会话、窗口和窗格的树,下半部分是每个窗格中光标周围区域的预览。对于会话,预览会在尽可能多的窗口中显示活动窗格;对于Windows,尽可能多的窗格将适合;对于窗格,只选择窗格。
控制树模式的键不需要前缀。列表可以用上键和下键导航。输入对所选项目的更改(它将成为附加的会话、当前窗口或活动窗格)并退出模式。如果可能,右展开该项会话展开以显示其窗口,窗口展开以显示其窗格。左侧折叠项目以隐藏任何窗口或窗格。O改变项目的顺序,q退出树模式。
树中的项目通过按下t来标记,再按下t来取消标记。带标签的项目以粗体显示,名称后面有*。所有带标签的物品可以通过按t来取消标签,带标签的物品可以通过按X来一起被杀死,或者通过按:来获得提示。
树中的每个项目在行开始的方括号中有作为快捷键。按下此键将立即选择该项目(就像它已被选中并按下Enter键一样)。前10项是键0到9,之后使用键M-a到M-z。
这是一个不按前缀键的树模式下可用的键列表:
Key | Function |
---|---|
Enter | 更改附加的会话、当前窗口或活动窗格 |
Up | 选中上一项 |
Down | 选中下一项 |
Right | 扩大项 |
Left | 缩减项 |
x | 杀死选中的项 |
X | 杀死标记的项目 |
< | 滚动预览左侧内容 |
> | 滚动预览右侧内容 |
C-s | 按名称搜索 |
n | 重复上次搜索 |
t | 切换项是否被标记 |
T | 去除标签项 |
C-t | 标记所有项 |
: | 为所选项目或每个标记项目运行命令的提示符 |
O | 改变排序字段 |
r | 反向排序顺序 |
v | 触发预览 |
q | 退出树模式 |
使用choose-tree
命令激活树模式
6. 分离其它客户端
按C-b D
(即C-b S-d
)可以得到一个客户列表。这类似于树模式,称为客户机模式。
每个客户端都显示在上半部分的列表中,包括它的名称、附加的会话、大小和最后使用的时间和日期;下半部分预览了选定的客户端,其状态行尽可能多。
移动键和标记键与树模式相同,但其他键不同,例如Enter
键将分离选定的客户端。
这是一个在客户端模式下没有移动和标记键的键列表,与树模式相同:
Key | Function |
---|---|
Enter | 分离选择客户 |
d | 卸载所选客户端,与Enter相同 |
D | 分离标记的客户端 |
x | 分离选定的客户端并尝试终止启动它的shell |
X | 分离标记了客户机,并尝试终止它们开始时使用的shell |
除了使用客户端模式,detach-client
标志有一个-a
标志来分离除了附加的客户端之外的所有客户端。
7. 终止会话、窗口或窗格
按下C-b &
确认提示,然后杀死(关闭)当前窗口。窗口中的所有窗格在同一时间被杀死。C-b x
只终止活动窗格。这些都绑定到kill-window
和kill-pane
命令。
kill-session
命令会杀死附加的会话及其所有窗口,并卸载客户端。kill-session
没有键绑定,但是可以在命令提示符或树模式下的:
提示符中使用。
8. 重命名会话和窗口
C-b $
将提示为所附的会话输入新名称。使用rename-session
命令。同样,C-b
使用rename-window
命令提示输入当前窗口的新名称。
9. 交换和移动
Tmux允许用swap-pane
和swap-window
命令交换窗格和Windows。
为了方便交换,可以标记单个窗格。所有会话都有一个标记窗格。C-b m
键绑定用于切换附加会话中当前窗口中的活动窗格是否为标记窗格。C-b M
完全清除标记窗格,因此没有标记窗格。标记窗格的边框由绿色背景显示,包含标记窗格的窗口在状态行中有一个M
标志。
一旦一个窗格被标记,就可以使用swap-pane命令将其与当前窗口中的活动窗格交换,或者使用swap-window命令将包含标记窗格的窗口与当前窗口交换。例如,使用命令提示符:
:swap-pane
此外,还可以使用C-b {
和C-b }
键绑定将窗格与上面或下面的窗格交换。
移动窗口使用move-window
命令或C-b .
键绑定。按下C-b .
将提示当前窗口的新索引。如果一个窗口已经存在于给定的索引,将显示一个错误。可以使用-k
标志-来替换现有的窗口,以便将一个窗口移动到索引999:
:move-window -kt999
如果窗口列表中有空白,可以使用-r
标志对索引进行重新编号以move-window
。例如,这将把窗口列表0,1,3999变成0,1,2,3:
:movew -r
10. 调整和缩放窗格
窗格可以用C-b C-Left
,C-b C-Right
, C-b C-Up
和C-b C-Down
来调整窗格大小,大步可以用C-b M-Left
, C-b M-Right
, C-b M-Up
和C-b M-Down
。它们使用resize-pane
命令。
一个单一的窗格可以暂时占据整个窗口使用C-b z
,隐藏任何其他窗格。再次按C-b z
将窗格和窗口布局恢复到原来的状态。这叫做缩放和不缩放。窗格被缩放的窗口在状态行中以Z标记。改变窗口中窗格大小或位置的命令会自动取消窗口的缩放。
11. 窗口布局
窗口中的窗格可以自动排列成几个命名的布局之一,这些布局可以使用C-b Space
绑定来进行旋转,或者直接使用C-b M-1
、C-b M-2
等方式进行选择。
可用的布局如下:
Name | Key | Description |
---|---|---|
even-horizontal | C-b M-1 | 均匀分布 |
even-vertical | C-b M-2 | 上下均匀地展开 |
main-horizontal | C-b M-3 | 顶部是一大块,其余的均匀分布 |
main-vertical | C-b M-4 | 左边有一大块,其余的均匀地上下摊开 |
tiled | C-b M-5 | 平铺的行数与列数相同 |
12. 复制和黏贴
Tmux有自己的复制和粘贴系统。一段复制的文本称为粘贴缓冲区。文本使用复制模式复制,使用C-b[
输入,并且最近复制的文本粘贴到使用C-b ]
的活动窗格中。
可以给粘贴缓冲区指定名称,但默认情况下由tmux给它们指定一个名称,例如buffer0
或buffer1
。这样的缓冲区称为自动缓冲区,最多保留50个缓冲区——一旦有50个缓冲区,当添加另一个时,最老的将被删除。如果一个缓冲区被赋予了一个名称,它就被称为一个命名缓冲区;命名缓冲区不会被删除,不管有多少。
可以将tmux配置为将任何复制的文本发送到系统剪贴板:本文解释了对此进行配置的不同方法。
复制模式冻结窗格中的任何输出,并允许复制文本。查看模式(前面描述过)是复制模式的只读形式。
与命令提示符一样,复制模式使用类似于emacs(1)的键;但是,如果VISUAL或EDITOR环境变量被设置为包含vi的内容,那么将使用vi(1)样式的键。以下键是一些在复制模式下可用的emacs(1)键:
Key | Action |
---|---|
Up , Down , Left , Right | 移动光标 |
C-Space | 开始选择 |
C-w | 复制选择并退出复制模式 |
q | 退出复制模式 |
C-g | 停止选择而不复制,或停止搜索 |
C-a | 将光标移到行首 |
C-e | 将光标移到行尾 |
C-r | 搜索交互地向后 |
M-f | 将光标移到下一个单词 |
M-b | 将光标移到上一个单词上 |
手册页中提供了vi(1)和emacs(1)的完整键列表。
一旦复制了一些文本,可以使用C-b ]
粘贴最近的文本,或使用C-b =
。输入的缓冲区模式粘贴较旧的缓冲区。缓冲区模式类似于客户端模式和树模式,它提供了一个缓冲区列表以及它们内容的预览。除了树模式和客户端模式中使用的导航和标记键,缓冲区模式支持以下键:
Key | Function |
---|---|
Enter | 粘贴选择缓冲 |
p | 粘贴选定的缓冲区,与Enter相同 |
P | 粘贴标签缓冲区 |
d | 删除选中的缓冲 |
D | 删除标记的缓冲区 |
可以使用set-buffer
命令重命名缓冲区。-b
标志给出了现有的缓冲区名称,-n
给出了新名称。这将把它转换为一个命名缓冲区。例如,在命令提示符中将buffer0
重命名为mybuffer
:
:setb -bbuffer0 -nmybuffer
Set-buffer也可以用于创建缓冲区。创建一个带有文本栏的foo缓冲区:
:setb -bfoo bar
load-buffer将从文件中加载一个缓冲区:
:loadb -bbuffername ~/a/file
不带-b
的Set-buffer
或load-buffer
将创建一个自动缓冲区。
使用save-buffer
可以将现有缓冲区保存到文件中:
:saveb -bbuffer0 ~/saved_buffer
13. 寻找窗口和窗格
C-b f
提示输入一些文本,然后进入带有筛选器的树模式,以只显示文本出现在可见内容或窗格标题或窗口名称中的窗格。如果找到窗格,则只有那些窗格出现在树中,并且文本filter:active
显示在预览上方。如果没有找到窗格,所有窗格将显示在树和文本filter:no matches
上方不会出现。
14. 使用鼠标控制
Tmux对鼠标有丰富的支持。它可用于更改活动窗格或窗口、调整窗格大小、复制文本或从菜单中选择项目。
mouse
选项支持鼠标;选项和配置文件将在下一节中详细描述。要从命令提示符打开鼠标,使用set-option
命令:
:set -g mouse on
一旦鼠标被启用:
- 按下窗格上的左键将使该窗格成为活动窗格。
- 按下状态行窗口名称上的左键将使该窗口成为当前窗口。
- 用左按钮在窗格边框上拖动可以调整窗格的大小。
- 用左键拖动窗格内的文本;当鼠标释放时,所选文本将被复制。
- 按下窗格上的右按钮将打开一个带有各种命令的菜单。当鼠标按钮被释放时,选中的命令将以窗格作为目标运行。每个菜单项也有一个键快捷键,显示在括号中。
- 按下窗口或状态行会话名称上的右按钮,将打开窗口或会话的类似菜单。