screen 簡介
Screen 是一個 Linux 系統上的一個軟體,可以讓使用者在 linux 中建立多個視窗,每視窗都是一個新的 Tab ,而且每個都是一個獨立的程序,在程式開發上會是很棒的功能,你可以想像瀏覽器上多個 Tab 的功能,就如同 screen 可以開多個視窗來切換工作內容,工程師能建立多個視窗,並設定每個視窗的工作目錄,或是在每個不同的視窗中,打開不同的程序,能夠同時多工,例如我習慣開一個 Tab 來寫程式,然後再開一個 Tab 來執行程式,這樣程式在執行的過程中,我就可以切換回寫程式的 Tab ,不用停在原來視窗等待程式執行。
screen 安裝
unix-like 系統可以用 yum 或 apt-get 來安裝 screen。
- sudo yum install -y screen
- sudo apt-get install -y screen
如果裝不成功的話,還可以自已 Compile source code ,方式如下:
- 下載: ftp://ftp.gnu.org/gnu/screen/screen-4.0.3.tar.gz
- 解壓 tar -zxvf screen-4.0.3
- 進行該資料夾,開始安裝
- ./configure --prefix=/home/program/screen --bindir=/usr/local/bin --enable-colors256
- --enable-colors256 : 支援 256 色
- make && sudo make install
最後輸入 "screen -RU s1" :啟用 screen ,最好先行設定 .screenrc 這個檔案 ,否則肉眼看不出 screen 切換視窗的功能, "U" 的意思是說,我要使用 UTF8 編碼,如果沒有加上 U 這個設定,有時候 screen 會出現亂碼。
.screenrc 設定
每個 Linux User 都能夠建立自已的 .screenrc ,screen 可以針對不同的 User ,而産生不同配色,以及不同的 UI 呈現方式。
.screenrc 檔案的目錄在每個 User 主目錄底下,輸入指令 vim ~/.screenrc (/home/username/.screenrc) 就能夠編輯,接下來提供一些我常用的設定內容。
熱鍵 bindkey
增加熱鍵 「Alt+z」 , 「Alt+x」切換視窗,使用這兩個快捷鍵來切換左右視窗。
- bindkey ^[z prev
- bindkey ^[x next
增加熱鍵 「Ctrl+左方向鍵」 , 「Ctrl+右方向鍵」切換視窗,因為每一個編輯器對快捷鍵的定義不同,所以會有下列三種設定。
- bindkey ^5D prev # xshell
- bindkey ^5C next #xshell
- bindkey ^[[D prev # putty
- bindkey ^[[C next #putty
- bindkey ^[[1;5D prev # Cygwin , chrome ssh
- bindkey ^[[1;5C next # Cygwin , chrom ssh
MacBook 的 Virtual Terminal 按鍵輸出有點不同,設定方式要增加下列兩種。
- bindkey \033[5D prev
- bindkey \033[5C next
MacBook iterm2
- bindkey ^[[1;5D prev #Mac iterm2
- bindkey ^[[1;5C next #Mac iterm2
在 .screenrc 中 ^[
" 這個符號 代表 Escape
也就是 ESC 這個鍵,它的 hex code 是 \x1b
,每種 SSH Terminal 它的按鍵都有不同的定義,所以我才會針對 xshell, putty, cygwin 等提供不同的 keymap ,若是你不知道組合鍵的對應 hex code,那麼你可以下載 https://www.puritys.me/filemanage/blog_files/keys.pl 這個檔案,執行這個 perl 程式 "perl keys.pl",然後再按你的組合鍵,程式就會印出組合鍵的 hex code。
- > perl keys.pl
- press 'x' to exit
- \x1b\x5b\x31\x3b\x32\x44
上面這個範例中,我輸入 "Alt +a",結果印出 \x1b\x5b\x31\x3b\x32\x44
,接著你從 1 按到 10 ,再從 a 按到 z ,就會知道所有按鍵的 hex code 。
hex code | key |
---|---|
\x1b | ESC |
\x5b | [ |
\x31 | 1 |
\x3b | ; |
\x32 | 2 |
\x44 | D |
最後整個組合鍵在 .screenrc 是代碼就是 : ^[[1;2D
。
其它的設定
在 Google Chrome SSH Client 切換視窗時,切換成功的提示訊息會擋住 screen Tab ,所以加入 bell_msg 的設定,並設為空白,這樣就不會看到沒什麼用的切換提示訊息。
- bell_msg ""
指定 screen 使用 utf8 編碼。
- defencoding utf8
設定 screen 可以往上卷的行數 (scroll back)
- defscrollback 10000
.screenrc 檔案內容
- # Start message
- startup_message off
- bell_msg ""
- # Set default encoding using utf8
- defutf8 on
- # Refresh the display when exiting programs
- altscreen on
- # Dynamic title
- shelltitle '$ |bash'
- # hotkey win
- bindkey ^[z prev
- bindkey ^[x next
- # for Xshell
- bindkey ^5D prev
- bindkey ^5C next
- # for putty
- bindkey ^[[D prev #ctrl + left , move to previous window
- bindkey ^[[C next # ctrl+ right , move to next window
- #mac
- bindkey \033[5D prev #ctrl + left , move to previous window
- bindkey \033[5C next # ctrl+ right , move to next window
- shell -bash
- bind s
- #ban掉鎖定預設熱鍵
- defencoding utf8
- caption always "%{.KW} %-w%{.mW}[%n] %t%{.KW}%+w"
- hardstatus alwayslastline "%{R}[ %{w}%1` %{R}]%=%{M}%e %{G}%H %{Y} %c %{R} %d/%m/%Y %{K} Load: %l %{w}"
- #term screen-256color
- attrcolor b ".I"
- termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
- defbce on
- screen 0
- select 0
- exec ssh-agent screen
- exec true
- source $HOME/.ssh/screen_agent
screen 使用方式
切換 window
- 先按一下『Ctrl+a』,再按『"』,這時會進入 screen window list ,你可以使用方向鍵去選擇你要進入的 window,如果你已經有設定上個階段教你的 .screenrc ,那使用快捷鍵切換速度會快很多的!
screen 之間的 window ,如何從 A window 複製文字到 B window 呢?
- 先按一下『Ctrl+a 』,再按『[』進入 Copy Mode。
- 使用方向鍵移動到你要復製的文字開頭,按下『空白鍵』,這時你會看到第一個字母已經被反白。
- 再度使用方向鍵移動到復製的結尾,按下大寫『Y』,這樣 screen 就會將你選取的內容,存到 screen buffer。
- 切換到 B window ,先按一下『Ctrl+a 』,再按『]』,即完成貼上。
我個人比較喜歡用滑鼠來複製,比較簡單使用。
暫存 copy 內容
- 『Ctrl+a 』,『 > 』:存下目前 copy 的內容到 screen-exchange buffer。
- 『Ctrl+a 』,『 < 』:讀取目前 screen-exchange buffer 的內容,並存到 Copy mode buffer,之後用來貼上。
- 『Ctrl+a 』,『 = 』:移除目前 screen-exchange buffer 的內容。
- 『Ctrl+a 』,『 ] 』:貼上。
視窗切割
screen 除了可以建立多個 Tab 之外,還可以將視窗切割成上,下兩個,讓你一次看到兩個不同的視窗。
- 『Ctrl+a 』,『 S 』:將原視窗分割出上、下兩個。
- 『Ctrl+a 』,『 X 』:移除一個視窗。
Screen 預設熱鍵說明
回應 (Leave a comment)