天天看點

tmux系列:3、tmux視窗和窗格

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. 切換視窗

有幾個鍵綁定可以改變會話的目前視窗:

  • ​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的窗格交換,則數字和窗格本身都會被交換。

tmux系列:3、tmux視窗和窗格

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​

​指令激活樹模式

tmux系列:3、tmux視窗和窗格

6. 分離其它用戶端

按​

​C-b D​

​​(即​

​C-b S-d​

​)可以得到一個客戶清單。這類似于樹模式,稱為客戶機模式。

每個用戶端都顯示在上半部分的清單中,包括它的名稱、附加的會話、大小和最後使用的時間和日期;下半部分預覽了標明的用戶端,其狀态行盡可能多。

移動鍵和标記鍵與樹模式相同,但其他鍵不同,例如​

​Enter​

​鍵将分離標明的用戶端。

這是一個在用戶端模式下沒有移動和标記鍵的鍵清單,與樹模式相同:

Key Function

​Enter​

分離選擇客戶

​d​

解除安裝所選用戶端,與Enter相同

​D​

分離标記的用戶端

​x​

分離標明的用戶端并嘗試終止啟動它的shell

​X​

分離标記了客戶機,并嘗試終止它們開始時使用的shell

除了使用用戶端模式,​

​detach-client​

​​标志有一個​

​-a​

​标志來分離除了附加的用戶端之外的所有用戶端。

tmux系列:3、tmux視窗和窗格

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對滑鼠有豐富的支援。它可用于更改活動窗格或視窗、調整窗格大小、複制文本或從菜單中選擇項目。

:set -g mouse on      
  • 按下窗格上的左鍵将使該窗格成為活動窗格。
  • 按下狀态行視窗名稱上的左鍵将使該視窗成為目前視窗。
  • 用左按鈕在窗格邊框上拖動可以調整窗格的大小。
  • 用左鍵拖動窗格内的文本;當滑鼠釋放時,所選文本将被複制。
  • 按下窗格上的右按鈕将打開一個帶有各種指令的菜單。當滑鼠按鈕被釋放時,選中的指令将以窗格作為目标運作。每個菜單項也有一個鍵快捷鍵,顯示在括号中。
  • 按下視窗或狀态行會話名稱上的右按鈕,将打開視窗或會話的類似菜單。

繼續閱讀