Bash是Linux作業系統和macOS預設的shell,在終端機上使用Bash來操作電腦,主要是用透過從鍵盤輸入指令來進行,因此指令的輸入速度會大大地影響著操作電腦的效率。這篇文章將會介紹如何利用Emacs或是Vi的快速鍵來加快指令的輸入。
Emacs和Vi都是Unix-like系統常用的終端機文字編輯器,它們的用法雖然差異很大,但都有提供一些方便的快速鍵來輸入命令,加速文字的編輯效率。而事實上,我們也可以在Bash shell中,去使用Emacs或是Vi的快速鍵,來操作終端機的指令輸入列。
Emacs風格的命令列編輯方式
預設的Bash shell有提供Emacs快速鍵的操作方式。如下:
- Ctrl + p:等同於按一次↑。查看上一筆歷史中的指令。
- Ctrl + n:等同於按一次↓。查看下一筆歷史中的指令。
- Ctrl + b:等同於按一次←。游標向左。
- Ctrl + f:等同於按一次→。游標向右。
- Ctrl + a:等同於按下Home。游標跳到最左。這個對於非標準式的鍵盤來說十分好用。
- Ctrl + e:等同於按下End。游標跳到最右。這個對於非標準式的鍵盤來說十分好用。
- Ctrl + d:等同於按下Delete。刪除游標目前所在位置的字元。這個對於非標準式的鍵盤來說十分好用。
- Ctrl + h:等同於按一次Backspace。刪除游標目前所在位置的前一個字元。
- Alt + 數字鍵 + [數字鍵 ...],或ESC + 數字鍵 ...,然後再按下非數字鍵或上面提到的快速鍵:模擬重複按下某個非數字鍵或上面提到的快速鍵,次數即為數字鍵輸入的數字。例如要查看前三筆歷史中的指令,可以按下ESC + 3 + ↑,或是ESC + 3 + Ctrl + p,或是Alt + 3 + Ctrl + p。
(macOS請自行將Ctrl換成Command)
如果要將不是Emacs風格的命令列編輯方式改成Emacs風格的話,可以執行以下指令:
Vi風格的命令列編輯方式
如果不習慣Emacs的快速鍵,可以使用以下指令將命令列編輯方式調整為Vi風格:
如果想要永久保存Vi風格的設定,可以將以上指令放置到開機時會自動執行的設定檔中。
Vi的快速鍵都是以ESC開始,進入命令模式(Command mode)後,用鍵盤敲擊命令。
游標移動命令如下:
- k:等同於按一次↑。查看上一筆歷史中的指令。
- j:等同於按一次↓。查看下一筆歷史中的指令。
- h:等同於按一次←。游標向左。
- l:等同於按一次→。游標向右。
- 0:等同於按下Home。游標跳到最左。這個對於非標準式的鍵盤來說十分好用。如果是按^,則是跳到第一個非空白字元,不過這個在命令列中幾乎不會用到啦。
- $(其實就是Shift + 4):等同於按下End。游標跳到最右。這個對於非標準式的鍵盤來說十分好用。
- w或W:游標移動到下一個字的開頭。
- b或B:游標移動到上一個字的開頭。
- e或E:游標移動到目前這個字的結尾。
- G:查看歷史中最早的指令。
以上,k、j、h、l、w或W、b或B都可以在按下去之前,先透過數字鍵輸入要模擬重複按下的次數。例如要查看前三筆歷史中的指令,可以按下ESC + k + k + k,或是ESC + 3 + k。
除了移動游標的命令外,還有編輯命令列的命令。如下:
- i:從游標所在位置開始插入字元。
- I:從該行指令的第一個非空白字元的位置開始插入字元。
- a:從游標所在位置的下一個位置開始插入字元。
- A:從該行指令的結尾後開始插入字元。
- r:取代游標所在位置的一個字元。
- R:從游標所在位置開始取代字元。
如果要刪除字元,可以按下d + 游標移動命令來刪除從目前游標所在位置到目標位置的字元。若是按兩次d可以刪除整行指令。另外,y是複製命令,用法和d相同,只不過使用y所複製的字,並不會存在於系統的剪貼簿當中,只能用於目前的Bash shell。
p或P可以貼上由y所複製的字。p會貼在目前的游標位置之後,P會貼在目前的游標位置。