本文介紹了 Linux 提供的拆分終端的方法,它能夠幫助你完成多工工作。那麼,你最喜歡哪一款終端複用工具呢?
沒有什麼問題是不能用一個 Linux 終端解決的,如果不行,那就用兩個。
很早以前,終端其實是一個物理裝置,而現在的終端實際上是在計算機上被模擬出來的一個應用程式。當你使用終端和計算機進行互動的時候,就會發現,只開啟一個終端是不夠用的。在進行編譯、資料處理等長時間任務的時候,你不得不開啟一個新終端或新索引標籤來同時進行其它工作。
如果你是系統管理員,你就需要更多的終端視窗,以便連線到多個不同的主機上並行工作了。
在 Linux 系統中,終端應用程式在很久之前就已經開始帶有索引標籤功能了。而現在的終端應用程式裡,索引標籤已經是標配功能了,這是非常流行的趨勢。儘管如此,工作的時候在多個索引標籤之間來回切換,或多或少也會分散我們的注意力,甚至帶來不便。
而最好的解決方案就是將整個螢幕劃分為多個部分,這樣多個終端就可以在同一個終端應用程式視窗中同時存在。Linux 發行版中也有很多相關的工具可以實現這一功能。
在此之前,我們首先要明確 Shell、終端、控制台這三個概念。想要詳細了解的話,請參閱 Enable Sysadmin 部落格上的相關文章。
簡而言之:
Alt+Ctrl+F2
進入控制台,通常情況下從 F3
到 F7
都是不同的控制台,其中桌面環境有可能是 F1
或者 F7
,這在不同的發行版中可能會有所不同。因此,有些應用程式提供的功能是拆分 Shell 或者控制台,有些應用程式的功能則是拆分終端。
tmux 可以說是最靈活、最強大的螢幕拆分工具了,它通過鍵盤控制對多個終端的複用,因此你可以將一個控制台疊放在另一個控制台上面,並在兩個控制台之間切換。你還可以將整個螢幕等分為多個控制台,以便同時觀察不同控制台上的狀況。
tmux
的所有操作都是通過鍵盤完成的,這就意味著你的手不需要離開鍵盤去尋找滑鼠。為此,你需要記住一些按鍵組合。
如果你只用 tmux
來做螢幕拆分,那你只需要記住一下這些命令:
Ctrl-B %
豎直拆分螢幕(兩個 Shell 分別位於左右)Ctrl-B "
水平拆分螢幕(兩個 Shell 分別位於上下)Ctrl-B O
切換到另一個 ShellCtrl-B ?
檢視幫助Ctrl-B d
斷開 tmux
並讓其在後台執行(可以使用 tmux attach
重新進入)tmux
的一大好處是,在一台計算機上啟動 tmux
對談之後,也可以從另一台計算機上進入到這個對談,由此可以看出,tmux
對 Shell 進行了守護行程化。
例如,當我在樹莓派上執行 tmux
,我就可以從計算機上連線到樹莓派並登入 IRC,當我斷開連線時,樹莓派上的 tmux
會繼續執行,並等待我的下一次連線,在此期間 IRC 是處於持續登入狀態的。
GNU Screen 也是一個 Shell 復用工具,類似於 tmux
,你可以在斷開一個活動對談後重連到其中,它也支援豎直或水平拆分螢幕。
screen
的靈活性比 tmux
要弱一些。它預設的系結按鍵組合是 Ctrl-A
,和 Bash 中游標移動到行首的快捷鍵是一樣的。因此,當你正在執行 screen
的時候,如果想要將游標移動到行首,就需要多按一次 Ctrl-A
。而我自己的做法是,在 $HOME/.screenrc
檔案中將係結按鍵組合重新設定為 Ctrl-J
。
escape ^jJ
儘管 screen
在螢幕拆分功能上做得很好,但 tmux
上的一些缺點在 Screen 上也同樣存在。例如在拆分 Shell 時,在一個新的面板中不會啟動新的 Shell ,而是需要使用 Ctrl-A Tab
導航到另一個面板(如果你按照我的方式重新設定了按鍵組合,需要對應地把 Ctrl-A
改為 Ctrl-J
),然後通過 Ctrl-A C
手動建立一個新的 Shell。
和 tmux
不同的是,screen
在退出一個 Shell 的時候,螢幕拆分狀態不會改變,這樣的設計在某些情況下是比較適合的,但麻煩之處在於需要手動管理螢幕拆分狀態。
儘管如此,screen
還是一個相當可靠靈活的應用程式,在無法使用 tmux
的時候,你可以選擇 screen
作為備選方案。
在預設按鍵方案下,screen
常用的基本命令包括:
Ctrl-A |
豎直拆分螢幕(兩個 Shell 分別位於左右)Ctrl-A S
水平拆分螢幕(兩個 Shell 分別位於上下)Ctrl-A Tab
切換到另一個 ShellCtrl-A ?
檢視幫助Ctrl-A d
斷開 screen
並讓其在後台執行(可以使用 screen -r
重新進入)Konsole 是 KDE Plasma 桌面使用的終端應用程式。和 KDE 一樣,Konsole 也以高度可客製化、功能強大的特點而著稱。
和 tmux
、GNU Screen 類似,Konsole 也具有拆分螢幕的功能。由於 Konsole 是圖形介面的終端,因此還可以用滑鼠來控制它的螢幕拆分。
Konsole 的螢幕拆分功能在“檢視”選單中。它也支援豎直和水平方向的拆分,只要點選滑鼠就可以切換到另一個面板上。每個面板都是一個獨立的終端,因此都可以擁有獨立的主題和分頁。
Konsole 和 tmux
、GNU Screen 最大的不同之處在於不能斷開和重新連線 Konsole。除非使用遠端桌面軟體,否則只能在開啟 Konsole 時使用,這一點和大多數圖形介面應用程式是一樣的。
嚴格來說,Emacs 並不算是一個終端複用工具,但它的使用介面支援拆分和調整大小,同時還帶有一個內建的終端。
如果 Emacs 是你日常使用的文字編輯器,你就可以在不關閉編輯器的情況下,在不同的應用程式之間輕鬆互相切換。由於 Emacs eshell 模組是通過 eLISP 實現的,因此你可以在 Emacs 中使用相同的命令進行互動,讓一些繁瑣的操作變得更為簡單。
如果你是在圖形介面中使用 Emacs,還可以使用滑鼠進行操作。例如通過點選切換面板、用滑鼠調整拆分螢幕的的大小等等。儘管如此,鍵盤的操作速度還是更快,因此記住一些鍵盤快捷鍵還是很有必要的。
Emacs 的一些重要快捷鍵包括:
Ctrl-X 3
豎直拆分螢幕(兩個 Shell 分別位於左右)Ctrl-X 2
水平拆分螢幕(兩個 Shell 分別位於上下)Ctrl-X O
(大寫字母 O
)切換到另一個 Shell(你也可以使用滑鼠操作)Ctrl-X 0
(數位 0
)關閉當前面板如果你執行了 emacs-client 的話,就可以像 tmux 和 GNU Screen 一樣斷開和重新連線到 Emacs 了。
除了文字編輯器之外,一些 Linux 桌面也同樣具有拆分螢幕、載入終端這樣的功能。例如 Ratpoison、Herbsluftwm、i3、Awesome,甚至是啟用了特定設定的 KDE Plasma 桌面,都可以將多個應用程式在桌面上分塊顯示。
這些桌面可以讓各個應用程式佔據螢幕的固定位置,而不是浮在你的桌面“之上”,因此你可以在多個應用程式視窗之間輕鬆切換。你還可以開啟多個終端,排布成網格,就像終端複用工具一樣。更進一步,你還可以在你的桌面復用工具中載入一個終端複用工具。
而且,沒有什麼可以阻止你在裡面載入 Emacs 並分割緩衝區。沒有人知道,如果你把它更進一步,會發生什麼,大多數 Linux 使用者不會外傳這種秘密。
和 tmux
、GNU Screen 不同,你在斷開與桌面的連線後無法重新連線到同一個桌面對談,除非你使用了遠端桌面軟體進行連線。
除了上面介紹到的工具以外,還有諸如 Tilix、Terminator 這樣的終端模擬器,它們同樣可以實現螢幕拆分、嵌入終端元件等功能。歡迎在評論區分享你喜歡的終端拆分工具。