Bash是Linux作業系統和macOS預設的shell,在終端機上使用Bash來操作電腦,主要是用透過從鍵盤輸入指令來進行,因此指令的輸入速度會大大地影響著操作電腦的效率。這篇文章將會介紹如何利用Emacs或是Vi的組合鍵來加快指令的輸入。



Emacs和Vi都是類Unix系統常用的終端機文字編輯器,它們的用法雖然差異很大,但都有提供一些方便的組合鍵來輸入命令,加速文字的編輯效率。而事實上,我們也可以在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風格的話,可以執行以下指令:

set -o emacs

Vi風格的命令列編輯方式

如果不習慣Emacs的組合鍵,可以使用以下指令將命令列編輯方式調整為Vi風格:

set -o vi

如果想要永久保存Vi風格的設定,可以將以上指令放置到開機時會自動執行的設定檔中。

Vi的組合鍵都是以ESC開始,進入命令模式(Command mode)後,用鍵盤敲擊命令。

游標移動命令如下:

  • k:等同於按一次。查看上一筆歷史中的指令。
  • j:等同於按一次。查看下一筆歷史中的指令。
  • h:等同於按一次。游標向左。
  • l:等同於按一次。游標向右。
  • 0:等同於按下Home。游標跳到最左。這個對於非標準式的鍵盤來說十分好用。如果是按^,則是跳到第一個非空白字元,不過這個在命令列中幾乎不會用到啦。
  • $(其實就是Shift + 4):等同於按下End。游標跳到最右。這個對於非標準式的鍵盤來說十分好用。
  • wW:游標移動到下一個字的開頭。
  • bB:游標移動到上一個字的開頭。
  • eE:游標移動到目前這個字的結尾。
  • G:查看歷史中最早的指令。

以上,kjhlwWbB都可以在按下去之前,先透過數字鍵輸入要模擬重複按下的次數。例如要查看前三筆歷史中的指令,可以按下ESC + k + k + k,或是ESC + 3 + k

除了移動游標的命令外,還有編輯命令列的命令。如下:

  • i:從游標所在位置開始插入字元。
  • I:從該行指令的第一個非空白字元的位置開始插入字元。
  • a:從游標所在位置的下一個位置開始插入字元。
  • A:從該行指令的結尾後開始插入字元。
  • r:取代游標所在位置的一個字元。
  • R:從游標所在位置開始取代字元。

如果要刪除字元,可以按下d + 游標移動命令來刪除從目前游標所在位置到目標位置的字元。若是按兩次d可以刪除整行指令。另外,y是複製命令,用法和d相同,只不過使用y所複製的字,並不會存在於系統的剪貼簿當中,只能用於目前的Bash shell。

pP可以貼上由y所複製的字。p會貼在目前的游標位置之後,P會貼在目前的游標位置。