screen 是一個可以在單一個終端機裏,建立和開啟多個虛擬終端機的工具。因此,可以使用screen,一邊進行程式修改,一邊編譯程式,且還可以一邊用shell 下指令查詢資料等等。對於,開發者而言,screen 是一套非常強大的工具。以下我們將詳細介紹screen 的指令。
1. 安裝screen
在macOS 下,執行以下指令,進行screen 的安裝。
brew install screen
安裝完成之後,使用以下指令查看screen 資訊。
brew info screen
2. 使用screen
開啟終端機,在命令下輸入screen,即可以開始使screen。在使用之前,先解講screen 的指令規則。所有screen 的指令,都是由Ctrl+a 開始的。文章後面,會以C+a 代表按住Ctrl 鍵不放再按a 鍵。
Ctrl+a → C+a
舉例來說,
C+a c
代表按住Ctrl 鍵不放再按a 鍵,然後放開按c 鍵。
C+a C+c
代表按住Ctrl 鍵不放再按a 鍵,然後放開,再按Ctrl 鍵不放再按c 鍵。
3. 詳解screen 指令
| 1 | C+a c | 開啟新的視窗 |
| 2 | C+a C+c | 開啟新的視窗,並切換到這個新的視窗 |
| 3 | C+a nC+a C+nC+a Space | 切換到下一個視窗 |
| 4 | C+a pC+a C+p | 切換到上一個視窗 |
| 5 | C+a 0 | 切換到第一個視窗(即第0個視窗) |
| 6 | C+a 數字 | 切換到第X 個視窗(X 為0 ~ 9) Ex: C+a 9 |
| 7 | C+a wC+a C+w | 列出目前所開啟的視窗 列出的格式為: 0- Name 1- Name 2- Name 3- Name … Name 代表這個視窗的Title,預設是以開啟時的shell 名稱, 若– 變為*,即表示為目前顯示的視窗。 ![]() |
| 8 | C+a k | 關閉視窗並退出screen![]() |
| 9 | C+a ' | 會出現“Switch to window:”,輸入數字按下Enter,即可以跳到該視窗![]() |
| 10 | C+a " | 會出現視窗選單,上下移動,選到要跳的視窗,按下Enter,即可以跳到該視窗![]() |
| 11 | C+a C | 清除目前的視窗內容 |
| 12 | C+a dC+a C+d | Deatch 目前的視窗,並放到背景執行 |
| 13 | C+a H | 紀錄目前視窗所有顯示過的東西 (檔名為 screenlog.n,n 為視窗號碼)![]() |
| 14 | C+a iC+a C+i | 顯示目前視窗的資訊 |
| 15 | C+a lC+a C+l | 重繪視窗,如果視窗有字型亂掉可以使用這個指令 |
| 16 | C+a mC+a C+mC+a Enter | 顯示最近一次視窗訊息 |
| 17 | C+a v | 顯示screen 的版本資訊 |
| 18 | C+a ? | 顯示screen 的說明 |
| 19 | C+a k | 關閉screen 的視窗。輸入19 指令之後,出現詢問是否要關閉選項, 要再輸入y 確定關閉視窗 |
| 20 | C+a A | 修改視窗的標題名稱 |
4. screen 的Copy Mode
| 1 | C+a [C+a Esc | 進入screen 的Copy Mode 其按鍵規則,基本上與vim 一樣 |
① h → 向左移動一格② l → 向右移動一格③ j → 向下移動一格④ k → 向上移動一格⑤ 0 → 移到該行的最左邊⑥ ^ → 移到該行最左邊的非空白字元⑦ $ → 移到該行最右邊的非空白字元⑧ w → 以字為單位往前移動並移到字首⑨ b → 以字為單位往後移動並移到字首⑩ e → 字為單位往前移動並移到字尾⑪ C+b → 向上捲一頁⑫ C+f → 向下捲一頁⑬ / → 輸入要尋找的字串,按下Enter 開始尋找按下 n 往下找下一個相同字串⑭ ? → 輸入要尋找的字串,按下Enter 開始尋找按下 n 往上找下一個相同字串⑮ space → 第一次按下到第二次按下的區域會被複製到暫存區內⑯ C+a ] → 把⑮ 指令存到暫存區內的內容複製出來⑰ Esc → 離開Copy Mode |
5. screen 的分割畫面
| 1 | C+a | | 將視窗分割成左右兩個畫面![]() |
| 2 | C+a S | 將視窗分割成上下兩個畫面![]() |
| 3 | C+a Tab | 在有分割域區時,指令可以從🅐 畫面跳到🅑 畫面, 亦可從🅑 畫面跳到🅐 畫面 ![]() |
| 4 | C+a Q | 移除全部視窗分割畫面,回到沒有分割畫面狀態 |
| 5 | C+a X | 移除一個視窗分割畫面 |
6. screen 的特殊用法
前面有提到C+a d 指令,可以讓screen 進入Deatch 的狀態。當screen 在Deatch 狀態時,其每個視窗內的Process 仍然在執行,即使 Logout 也不會有影響。所以你可能接著離開身邊的電腦,然後跑出去喝水,或者另外找個地方坐下來再接著剛剛的工作。
那當你重新Login 之後,要怎麼重回剛剛screen 呢?重新開啟終端機輸入screen,只會再重新開啟一個新的screen 視窗。如果要重新再接回剛剛Deatch 的視窗,只需要輸入以下指令即可:
screen -r
但事情並不是這麼簡單。如果你的開啟的screen 數量只有一個,使用上述指令,即可以接回原本的screen 視窗。那該如何確認現在的screen 數量?只需要輸入以下指令即可:
screen -ls
如下圖所示,可以看到screen 的數量為2。

上面的Attached 表示已經連接的screen,Detached 表示沒有連接的screen。
如果screen 是多個,可以根據其screen id 來重新接回screen。如上圖,可以使用以下指令來重回指定的screen。
screen -r 1819
如果出現screen 已經Dead 狀態,如下圖。

可以輸入以下指令移除Dead 的srceen 視窗。
screen -wipe
如果已經有多個Deatch 的screen,可以輸入以下指令,一次便將全部的Deatch 的screen 關閉。
screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
7. screen 的.screenrc 設定檔
每個使用者都能夠建立自已的.screenrc 檔案,.screenrc 為screen 的進階設定檔案。輸入以下指令,編輯.screenrc。
vim ~/.screenrc
以下為目前常用的.screenrc 設定檔。
#關閉開啟訊息
startup_message off
#強制終端機為utf8
defutf8 on
#設定screen 可以往上捲的行數
defscrollback 1000000
#離開視窗時,自動refersh 螢幕
altscreen on
#MAC下,Alt+向左鍵切到上一個視窗
bindkey ^[^[[D prev #Mac iterm2
#MAC下,Alt+向右鍵切到下一個視窗
bindkey ^[^[[C next #Mac iterm2
#在視窗底下新增一個狀態列
Set hardstatus always on
defencoding utf8
#狀態列格式
#caption always "%{.KW} %-w%{.mW}[%n] %t%{.KW}%+w"
hardstatus alwayslastline " %-Lw%{= Bw}[%n] %t%{-}%+Lw %=| %Y/%m/%d%{= .m} %0c:%s "
#動態顯示視窗的標題名稱
shelltitle '$ |bash'
可以將以上內容貼到自己的.screenrc 上或到這裡下載檔案。










