快捷鍵的一些說明:
CTRL=C:這個鍵是指PC鍵盤上的Ctrl鍵
ALT=M:這個鍵是PC鍵盤上的ALT鍵,如果你鍵盤上沒有這個鍵,可以嘗試使用ESC鍵代替
SHIFT=S:此鍵是PC上的Shift鍵
ESC=E:這個鍵是PC鍵盤上的ESC鍵,此鍵一般在鍵盤的左上角
BACKSPACE=DEL:此鍵是是PC鍵盤上的Backspace鍵,一般位於主鍵盤區的右上角
文中”[]”括住的爲快捷鍵內容,”-“兩邊的內容是按住左邊鍵,再按右邊鍵獲得,”,”逗號兩邊的內容是先按左邊鍵,鬆開後再按右邊鍵。如:[CTRL-v]是表示按下Ctrl鍵之後,不要鬆開,再按下v鍵。
默認的情況下,快捷鍵的組成格式是:<CTRL | ALT | ESC >-[SHIFT-]<char>。即由Ctrl、Alt、Esc之一開頭,中劃線,Shift,中劃線,和一個字符組成。其中,中括號內的Shift和”-“有時可省略。
默認情況下,快捷鍵只有最後一個爲字符,其他的鍵值均爲功能鍵
出現[CTRL-?]這類快捷鍵,由於”?”是需要使用Shift按鍵才能獲得的字符,因此此類快捷鍵默認使用的是[CTRL-SHIFT-?]
要注意,在Bash裏面,快捷鍵可能會被寫成八進制或者十六進制的形式(跟在轉義符後面); 腳本文件中的快捷鍵並不是總能起作用的。另外快捷鍵有個規律,Ctrl開頭的快捷鍵一般是針對字符的,而Alt開頭的快捷鍵一般是針對詞的。
Bash下,如果使用的是shell腳本文件,快捷鍵不一定是一樣的,有的時候會出現同一個快捷鍵有不同的表現,這種情況一般是由於Bash所處的模式不同而引起的,你可以通過set命令來調整模式:
set -o emacs ##切到emacs模式 set -o vi ##切到vi模式 set -o ## 查看當前選項的設置狀態
1 2 3 4 5 6 | set -o emacs ##切到emacs模式 set -o vi ##切到vi模式 set -o ## 查看當前選項的設置狀態 |
這個是Bash的option選項,你可以根據具體情況進行設置,本文使用的是emacs模式。
快捷鍵 | 快捷鍵說明 | ||
---|---|---|---|
CTRL –A | 將光標移到行首(在命令行下) | ||
CTRL –B | 退格 (非破壞性的),這個只是將光標位置往回移動一個位置。 | ||
CTRL –C | 中斷,終結一個前臺作業。 | ||
CTRL –D | “EOF” (文件結尾:end of file)。它用於表示標準輸入(stdin)的結束。在控制檯或xterm 窗口輸入文本時,CTRL –D 刪除在光標下的字符。從一個shell中退出 (類似於exit)。如果沒有字符存在, | ||
CTRL –E | 將光標移動到行尾(在命令行下) | ||
CTRL –F | 將光標向前移動一個字符(在命令行下) | ||
CTRL –G | BEL。在一些老式打印機終端上,這會引發一個響鈴。在xterm終端上可能是嗶的一聲。 | ||
CTRL –H | 擦除(Rubout)(破壞性的退格)。在光標往回移動的時候,同時擦除光標前的一個字符。 | ||
CTRL –I | 水平製表符。 | ||
CTRL –J | 新行(換行[line feed]併到行首)。在腳本中,也可能表示爲八進制形式(’12’)或十六進制形式(‘\x0a’)。 | ||
CTRL –K | 垂直製表符(Vertical tab)。在控制檯或 xterm 窗口輸入文本時,CTRL –K 會刪除從光標所在處到行尾的所有字符。在腳本中,也可能表示爲八進制形式(’13’)或十六進制形式(‘\x0b’)。在腳本中,
#!/bin/bash ## 一個CTRL-K垂直製表符的例子 var=$'\x0aBottom Line\x0bTop line\x0a' ## 直接輸出 echo "$var" ## 使用col來過濾控制字符 echo "$var" | col ## 上面的顯示將會不一樣 exit 0
| ||
CTRL –L | 跳紙,換頁(Formfeed),清屏。 清空終端屏幕。在終端上,這個命令的作用和 | ||
CTRL –M | 回車(Carriage return)。 | ||
CTRL –N | 擦除從history緩衝區召回的一行文本(在命令行下)。如果當前輸入是歷史記錄中選擇的時候,這個是從這個歷史記錄開始,每按一次,是更接近的一條命令。 | ||
CTRL –O | 產生一個新行(在命令行下)。 | ||
CTRL –P | 從history緩衝區召回上一次的命令(在命令行下)。此快捷鍵召回的順序是由近及遠的召回,即按一次,召回的是前一次的命令,再按一次,是召回上一次之前的命令,這和CTRL –N 都是以當前的輸入爲起點,但是兩個命令操作剛好相反,CTRL –N 是從起點開始由遠及近(如果起點是歷史命令的話)。 | ||
CTRL –Q | Resume (XON)。恢復/解凍,這個命令是恢復終端的stdin用的,可參見CTRL –S 。 | ||
CTRL –R | 回溯搜索(Backwards search)history緩衝區內的文本(在命令行下)。注意:按下之後,提示符會變成(reverse-i-search)'': 輸入的搜索內容出現在單引號內,同時冒號後面出現最近最匹配的歷史命令。 | ||
CTRL –S | Suspend(XOFF),掛起。這個是凍結終端的stdin。要恢復可以按CTRL –Q 。 | ||
CTRL –T | 交換光標位置與光標的前一個位置的字符內容(在命令行下)。比如:echo $var; ,假設光標在a上,那麼,按下C-T之後,v和a將會交換位置:echo $avr; 。 | ||
CTRL –U | 擦除從光標位置開始到行首的所有字符內容。在某些設置下,CTRL –U 會不以光標位置爲參考而刪除整行的輸入。 | ||
CTRL –V | 在輸入文本的時候,按下C-V之後,可以插入控制字符。比如:echo -e ‘\x0a'; 和echo <CTRL-V><CTRL-J>; 這兩種效果一樣。這點功能在文本編輯器內非常有效。 | ||
CTRL –W | 當在控制檯或一個xterm窗口敲入文本時, CTRL –W 會刪除從在光標處往後(回)的第一個空白符之間的內容。在某些設置裏, CTRL –W 刪除光標往後(回)到第一個非文字和數字之間的字符。 | ||
CTRL –X | 在某些文字處理程序中,這個控制字符將會剪切高亮的文本並且將它複製到剪貼板中。 | ||
CTRL –Y | 將之前已經清除的文本粘貼回來(主要針對CTRL –U 或CTRL –W )。 | ||
CTRL –Z | 暫停一個前臺的作業;在某些文本處理程序中也作爲替換操作;在MSDOS文件系統中作爲EOF(End-of-file)字符。 | ||
CTRL –\ | 退出。和CTRL –C 差不多,也可能dump一個”core”文件到你的工作目錄下(這個文件可能對你沒用)。 | ||
CTRL –/ | 撤消操作,Undo。 | ||
CTRL –_ | 撤消操作。 | ||
CTRL –xx | 在行首和光標兩個位置間進行切換,此處是兩個”x”字符。 | ||
ALT –B | 光標往回跳一個詞,詞以非字母爲界(跳動到當前光標所在詞的開頭)。 | ||
ALT –F | 光標往前跳一個詞(移動到光標所在詞的末尾)。 | ||
ALT –D | 刪除光標所在位置到光標所在詞的結尾位置的所有內容(如果光標是在詞開頭,則刪除整個詞)。 | ||
ALT –BASKSPACE | 刪除光標所在位置到詞開頭的所有內容。 | ||
ALT –C | 將光標所在位置的字母轉爲大寫(如果光標在一個詞的起始位置或之前,則詞首字母大寫)。 | ||
ALT –U | 將光標所在位置到詞尾的所有字母轉爲大寫。 | ||
ALT –L | 將光標位置到詞尾的所有字母轉爲小寫。 | ||
ALT –R | 取消所有變更,並將當前行恢復到在歷史記錄中的原始狀態(前提是當前命令是從歷史記錄中來的,如果是手動輸入,則會清空行)。 | ||
ALT –T | 當光標兩側都存在詞的時候,交換光標兩側詞的位置。如:abc <ALT-T>bcd -> bcd abc | ||
ALT –. | 使用前一次命令的最後一個詞(命令本身也是一個詞,參見後一篇的Bang命令中的詞指示符概念)。 | ||
ALT –_ | 同ALT –. 。 | ||
ALT –數值 | 這個數值可以是正或者是負,這個鍵單獨沒有作用,必須後面再接其他內容,如果後面是字符,則表示重複次數。如:[ALT –10 ,k ]則光標位置會插入10個k字符(負值在這種情況下無效);如果後面接的是命令,則數字會影響後面命令的執行結果,如:[ALT –- 1 0 ,CTRL –D ]則向CTRL –D 默認方向相反(負數)的方向執行10次操作。 | ||
ALT –< | 移動到歷史記錄中的第一行命令。 | ||
ALT –> | 移動到歷史的最後一行,即當前正在輸入的行(沒有輸入的情況下爲空)。 | ||
ALT –P | 從當前行開始向前搜索,有必要則向”上”移動,移動時,使用非增量搜索查找用戶提供的字符串。 | ||
ALT –N | 從當前行開始向後搜索,如果有必要向”下”移動,移動時,使用非增量搜索查找用戶提供的字符串。 | ||
ALT –CTRL –Y | 在標誌點上插入前一個命令的第一個參數(一般是前一行的第二個詞)。如果有參數n,則插入前一個命令的第n個詞(前一行的詞編號從0開始,見歷史擴展)。負的參數將插入衝前一個命令的結尾開始的第n個詞。參數n通過M-No.的方式傳遞,如:[ALT –0 ,ALT –CTRL –Y ]插入前一個命令的第0個詞(命令本身)。 | ||
ALT –Y | 輪詢到刪除環,並複製新的頂端文本。只能在yank[CTRL –Y ]或者yank-pop[M –Y ]之後使用這個命令。 | ||
ALT –? | 列出能夠補全標誌點前的條目。 | ||
ALT –* | 把能夠補全[ALT –? ]命令能生成的所有文本條目插入到標誌點前。 | ||
ALT –/ | 試圖對標誌點前的文本進行文件名補全。[CTRL –X ,/ ]把標誌點前的文本當成文件名並列出可以補全的條目。 | ||
ALT –~ | 把標誌點前的文本當成用戶名並試圖進行補全。[CTRL –X ,~ ]列出可以作爲用戶名補全標誌點前的條目。 | ||
ALT –$ | 把標誌點前的文本當成Shell變量並試圖進行補全。[CTRL –X ,$ ]列出可以作爲變量補全標誌點前的條目。 | ||
ALT –@ | 把標誌點前的文本當成主機名並試圖進行補全。[CTRL –X ,@ ]列出可以作爲主機補全標誌點前的條目。 | ||
ALT –! | 把標誌點前的文本當成命令名並試圖進行補全。進行命令名補全時會依次使用別名、保留字、Shell函數、shell內部命令,最後是可執行文件名。[CTRL –X ,! ]把標誌點前的文本當成命令名並列出可補全的條目。 | ||
ALT –TAB | 把標誌點前的文本與歷史記錄中的文本進行比較以尋找匹配的並試圖進行補全。 | ||
ALT –{ | 進行文件名補全,把可以補全的條目列表放在大括號之間,讓shell可以使用。
|
在Bash下,如果能夠妥善的使用快捷鍵,在Linux系統的操作會變得非常快捷,比如我們在使用cat創建一個文件時,我們可以使用快捷鍵[CTRL-D]:
## 不用快捷鍵 cat >>/tmp/test<<_EOF ##這裏是內容 ##最後我們要在新行裏面輸入_EOF ##cat見到_EOF纔會將內容寫到文件中 ##使用快捷鍵 cat >>/tmp/test ##這裏輸入內容 ##輸入完畢之後,直接[CTRL-D]結束
1 2 3 4 5 6 7 8 9 10 | ## 不用快捷鍵 cat >>/tmp/test<<_EOF ##這裏是內容 ##最後我們要在新行裏面輸入_EOF ##cat見到_EOF纔會將內容寫到文件中
##使用快捷鍵 cat >>/tmp/test ##這裏輸入內容 ##輸入完畢之後,直接[CTRL-D]結束 |
有的時候我們需要創建一個文件,而後對這個文件進行操作:
touch /tmp/a-test-file-from-blog.useasp.net ## 不使用快捷鍵,文件名要重新輸入 chmod u+x /tmp/a-test-file-from-blog.useasp.net ##使用快捷鍵 chmod u+x <ALT-.> ## 快捷鍵[M-.]自動會將上面的最後一個參數附加
1 2 3 4 5 6 7 8 | touch /tmp/a-test-file-from-blog.useasp.net
## 不使用快捷鍵,文件名要重新輸入 chmod u+x /tmp/a-test-file-from-blog.useasp.net
##使用快捷鍵 chmod u+x <ALT-.> ## 快捷鍵[M-.]自動會將上面的最後一個參數附加 |
怎麼樣,有沒有更有效率?
當然,Bash的快捷鍵只有在不斷的使用中,才能達到真正的高效,在開始連要用那個快捷鍵都要思考半天的情況下,高效是很難的——但磨刀不誤砍材工,前期的投入是值得的。
如果你想自己的Bash有那麼一些不同,你也可以自己自定義快捷鍵,使用bind命令即可,Bash中的快捷鍵其實是Readline來提供的,因此,這裏快捷鍵的設置其實就是配置Readline,Readline中分兩種快捷鍵,一種是Readline內部的函數快捷鍵,另外一種是執行Shell命令,設置的時候稍有不同:
##查看Readline中可以使用的函數名稱 bind -l ##查看當前綁定的案件配置與其對應的功能 bind -v ##已經綁定的快捷鍵 bind -p ##綁定自定義執行命令shell命令的快捷鍵 bind -x '"\C-x\C-l":ls -al' ## 綁定後,按[C-x,C-L]就能執行ls -al ## 綁定內置函數功能 bind "\C-x":backword-delte-char ##這個是這行Readline庫中的函數backword-delte-char
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ##查看Readline中可以使用的函數名稱 bind -l ##查看當前綁定的案件配置與其對應的功能 bind -v ##已經綁定的快捷鍵 bind -p
##綁定自定義執行命令shell命令的快捷鍵 bind -x '"\C-x\C-l":ls -al' ## 綁定後,按[C-x,C-L]就能執行ls -al
## 綁定內置函數功能 bind "\C-x":backword-delte-char ##這個是這行Readline庫中的函數backword-delte-char |
這種設置只是針對當前的會話有效,一旦會話丟失,這樣設置的快捷鍵就會丟失,爲了能夠讓設置的快捷鍵永久有效,我們就需要將快捷鍵的配置寫入文件。在Linux系統中,能永久保存快捷鍵的地方有兩個,全局和用戶的配置文件,全局的是/etc/inputrc,而用戶的是在用戶的根目錄下~/.inputrc,全局的會影響所有的用戶,而用戶根目錄下的只會對相應的用戶產生影響。inputrc文件的大概樣子像下面這樣:
## 本例來自CentOS6.4的默認配置文件 $if mode=emacs # for linux console and RH/Debian xterm "\e[1~": beginning-of-line "\e[4~": end-of-line # commented out keymappings for pgup/pgdown to reach begin/end of history #"\e[5~": beginning-of-history #"\e[6~": end-of-history "\e[5~": history-search-backward "\e[6~": history-search-forward "\e[3~": delete-char "\e[2~": quoted-insert "\e[5C": forward-word "\e[5D": backward-word "\e[1;5C": forward-word "\e[1;5D": backward-word # for rxvt "\e[8~": end-of-line "\eOc": forward-word "\eOd": backward-word # for non RH/Debian xterm, can't hurt for RH/DEbian xterm "\eOH": beginning-of-line "\eOF": end-of-line # for freebsd console "\e[H": beginning-of-line "\e[F": end-of-line $endif
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | ## 本例來自CentOS6.4的默認配置文件 $if mode=emacs
# for linux console and RH/Debian xterm "\e[1~": beginning-of-line "\e[4~": end-of-line # commented out keymappings for pgup/pgdown to reach begin/end of history #"\e[5~": beginning-of-history #"\e[6~": end-of-history "\e[5~": history-search-backward "\e[6~": history-search-forward "\e[3~": delete-char "\e[2~": quoted-insert "\e[5C": forward-word "\e[5D": backward-word "\e[1;5C": forward-word "\e[1;5D": backward-word
# for rxvt "\e[8~": end-of-line "\eOc": forward-word "\eOd": backward-word
# for non RH/Debian xterm, can't hurt for RH/DEbian xterm "\eOH": beginning-of-line "\eOF": end-of-line
# for freebsd console "\e[H": beginning-of-line "\e[F": end-of-line $endif |
說明:
1.在配置文件中,\C代表CTRL,\M代表ALT,\e代表ESC,\\是反斜槓\,\’是單引號,\”是雙引號;
\C- control prefix \M- meta prefix \e an escape character \\ backslash \" literal ", a double quote \’ literal ’, a single quote
1 2 3 4 5 6 | \C- control prefix \M- meta prefix \e an escape character \\ backslash \" literal ", a double quote \’ literal ’, a single quote |
2.如果要查看某一個功能鍵的字符序列可以通過[CTRL-V]來實現,或者輸入cat後回車,進入編輯中,直接按快捷鍵
3.配置文件中可能會使用八進制或者十六進制來表示字符。
如果我們針對常用的操作設置成適當的快捷鍵,也許以前需要巴拉巴拉敲上半天的命令,你一個快捷鍵就能搞定,這無疑將會大大的提高我們的工作效率!快捷鍵吧,騷年!