tmux系列:3、tmux視窗和窗格
文章目錄
- tmux系列:3、tmux視窗和窗格
- 1. 建立新視窗
- 2. 拆分視窗
- 3. 切換視窗
- 4. 切換活動窗格
- 5. 選擇會話、視窗和窗格
- 6. 分離其它用戶端
- 7. 終止會話、視窗或窗格
- 8. 重命名會話和視窗
- 9. 交換和移動
- 10. 調整和縮放窗格
- 11. 視窗布局
- 12. 複制和黏貼
- 13. 尋找視窗和窗格
- 14. 使用滑鼠控制
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. 切換視窗
有幾個鍵綁定可以改變會話的目前視窗:
-
變成視窗0,C-b 0
變成視窗1,直到視窗C-b 1
變成視窗9。C-b 9
-
提示輸入一個視窗索引并更改該視窗。C-b '
-
按編号改變到視窗清單中的下一個視窗。是以在視窗1中按C-b n
會變成視窗2如果它存在的話。C-b n
-
按編号改變視窗清單中的上一個視窗。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
将更改為窗格編号1。C-b q 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 |
| 更改附加的會話、目前視窗或活動窗格 |
| 選中上一項 |
| 選中下一項 |
| 擴大項 |
| 縮減項 |
| 殺死選中的項 |
| 殺死标記的項目 |
| 滾動預覽左側内容 |
| 滾動預覽右側内容 |
| 按名稱搜尋 |
| 重複上次搜尋 |
| 切換項是否被标記 |
| 去除标簽項 |
| 标記所有項 |
| 為所選項目或每個标記項目運作指令的提示符 |
| 改變排序字段 |
| 反向排序順序 |
| 觸發預覽 |
| 退出樹模式 |
使用
choose-tree
指令激活樹模式
6. 分離其它用戶端
按
C-b D
(即
C-b S-d
)可以得到一個客戶清單。這類似于樹模式,稱為客戶機模式。
每個用戶端都顯示在上半部分的清單中,包括它的名稱、附加的會話、大小和最後使用的時間和日期;下半部分預覽了標明的用戶端,其狀态行盡可能多。
移動鍵和标記鍵與樹模式相同,但其他鍵不同,例如
Enter
鍵将分離標明的用戶端。
這是一個在用戶端模式下沒有移動和标記鍵的鍵清單,與樹模式相同:
Key | Function |
| 分離選擇客戶 |
| 解除安裝所選用戶端,與Enter相同 |
| 分離标記的用戶端 |
| 分離標明的用戶端并嘗試終止啟動它的shell |
| 分離标記了客戶機,并嘗試終止它們開始時使用的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 | | 均勻分布 |
even-vertical | | 上下均勻地展開 |
main-horizontal | | 頂部是一大塊,其餘的均勻分布 |
main-vertical | | 左邊有一大塊,其餘的均勻地上下攤開 |
tiled | | 平鋪的行數與列數相同 |
12. 複制和黏貼
Tmux有自己的複制和粘貼系統。一段複制的文本稱為粘貼緩沖區。文本使用複制模式複制,使用
C-b[
輸入,并且最近複制的文本粘貼到使用
C-b ]
的活動窗格中。
可以給粘貼緩沖區指定名稱,但預設情況下由tmux給它們指定一個名稱,例如
buffer0
或
buffer1
。這樣的緩沖區稱為自動緩沖區,最多保留50個緩沖區——一旦有50個緩沖區,當添加另一個時,最老的将被删除。如果一個緩沖區被賦予了一個名稱,它就被稱為一個命名緩沖區;命名緩沖區不會被删除,不管有多少。
可以将tmux配置為将任何複制的文本發送到系統剪貼闆:本文解釋了對此進行配置的不同方法。
複制模式當機窗格中的任何輸出,并允許複制文本。檢視模式(前面描述過)是複制模式的隻讀形式。
與指令提示符一樣,複制模式使用類似于emacs(1)的鍵;但是,如果VISUAL或EDITOR環境變量被設定為包含vi的内容,那麼将使用vi(1)樣式的鍵。以下鍵是一些在複制模式下可用的emacs(1)鍵:
Key | Action |
, , , | 移動光标 |
| 開始選擇 |
| 複制選擇并退出複制模式 |
| 退出複制模式 |
| 停止選擇而不複制,或停止搜尋 |
| 将光标移到行首 |
| 将光标移到行尾 |
| 搜尋互動地向後 |
| 将光标移到下一個單詞 |
| 将光标移到上一個單詞上 |
手冊頁中提供了vi(1)和emacs(1)的完整鍵清單。
一旦複制了一些文本,可以使用
C-b ]
粘貼最近的文本,或使用
C-b =
。輸入的緩沖區模式粘貼較舊的緩沖區。緩沖區模式類似于用戶端模式和樹模式,它提供了一個緩沖區清單以及它們内容的預覽。除了樹模式和用戶端模式中使用的導航和标記鍵,緩沖區模式支援以下鍵:
Key | Function |
| 粘貼選擇緩沖 |
| 粘貼標明的緩沖區,與Enter相同 |
| 粘貼标簽緩沖區 |
| 删除選中的緩沖 |
| 删除标記的緩沖區 |
可以使用
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對滑鼠有豐富的支援。它可用于更改活動窗格或視窗、調整窗格大小、複制文本或從菜單中選擇項目。
:set -g mouse on
- 按下窗格上的左鍵将使該窗格成為活動窗格。
- 按下狀态行視窗名稱上的左鍵将使該視窗成為目前視窗。
- 用左按鈕在窗格邊框上拖動可以調整窗格的大小。
- 用左鍵拖動窗格内的文本;當滑鼠釋放時,所選文本将被複制。
- 按下窗格上的右按鈕将打開一個帶有各種指令的菜單。當滑鼠按鈕被釋放時,選中的指令将以窗格作為目标運作。每個菜單項也有一個鍵快捷鍵,顯示在括号中。
- 按下視窗或狀态行會話名稱上的右按鈕,将打開視窗或會話的類似菜單。