Bash 行操作
簡介
Bash 內(nèi)置了 Readline 庫,具有這個庫提供的很多“行操作”功能霎迫,比如命令的自動補(bǔ)全斋枢,可以大大加快操作速度。
這個庫默認(rèn)采用 Emacs 快捷鍵知给,也可以改成 Vi 快捷鍵瓤帚。
$ set -o vi
下面的命令可以改回 Emacs 快捷鍵。
$ set -o emacs
如果想永久性更改編輯模式(Emacs / Vi)涩赢,可以將命令寫在~/.inputrc
文件戈次,這個文件是 Readline 的配置文件。
set editing-mode vi
本章介紹的快捷鍵都屬于 Emacs 模式筒扒。Vi 模式的快捷鍵怯邪,讀者可以參考 Vi 編輯器的教程。
Bash 默認(rèn)開啟這個庫花墩,但是允許關(guān)閉悬秉。
$ bash --noediting
上面命令中,--noediting
參數(shù)關(guān)閉了 Readline 庫冰蘑,啟動的 Bash 就不帶有行操作功能和泌。
光標(biāo)移動
Readline 提供快速移動光標(biāo)的快捷鍵。
-
Ctrl + a
:移到行首祠肥。 -
Ctrl + b
:向行首移動一個字符武氓,與左箭頭作用相同。 -
Ctrl + e
:移到行尾搪柑。 -
Ctrl + f
:向行尾移動一個字符聋丝,與右箭頭作用相同。 -
Alt + f
:移動到當(dāng)前單詞的詞尾工碾。 -
Alt + b
:移動到當(dāng)前單詞的詞首。
上面快捷鍵的 Alt 鍵百姓,也可以用 ESC 鍵代替渊额。
清除屏幕
Ctrl + l
快捷鍵可以清除屏幕,即將當(dāng)前行移到屏幕的第一行垒拢,與clear
命令作用相同旬迹。
編輯操作
下面的快捷鍵可以編輯命令行內(nèi)容。
-
Ctrl + d
:刪除光標(biāo)位置的字符(delete)求类。 -
Ctrl + w
:刪除光標(biāo)前面的單詞奔垦。 -
Ctrl + t
:光標(biāo)位置的字符與它前面一位的字符交換位置(transpose)。 -
Alt + t
:光標(biāo)位置的詞與它前面一位的詞交換位置(transpose)尸疆。 -
Alt + l
:將光標(biāo)位置至詞尾轉(zhuǎn)為小寫(lowercase)椿猎。 -
Alt + u
:將光標(biāo)位置至詞尾轉(zhuǎn)為大寫(uppercase)惶岭。
使用Ctrl + d
的時候,如果當(dāng)前行沒有任何字符犯眠,會導(dǎo)致退出當(dāng)前 Shell按灶,所以要小心芦疏。
剪切和粘貼快捷鍵如下惹悄。
-
Ctrl + k
:剪切光標(biāo)位置到行尾的文本。 -
Ctrl + u
:剪切光標(biāo)位置到行首的文本医清。 -
Alt + d
:剪切光標(biāo)位置到詞尾的文本量蕊。 -
Alt + Backspace
:剪切光標(biāo)位置到詞首的文本铺罢。 -
Ctrl + y
:在光標(biāo)位置粘貼文本。
同樣地残炮,Alt 鍵可以用 Esc 鍵代替韭赘。
自動補(bǔ)全
命令輸入到一半的時候,可以按一下 Tab 鍵吉殃,Readline 會自動補(bǔ)全命令或路徑辞居。比如,輸入cle
蛋勺,再按下 Tab 鍵瓦灶,Bash 會自動將這個命令補(bǔ)全為clear
。
如果符合條件的命令或路徑有多個抱完,就需要連續(xù)按兩次 Tab 鍵贼陶,Bash 會提示所有符合條件的命令或路徑。
除了命令或路徑巧娱,Tab 還可以補(bǔ)全其他值碉怔。如果一個值以$
開頭,則按下 Tab 鍵會補(bǔ)全變量禁添;如果以~
開頭撮胧,則補(bǔ)全用戶名;如果以@
開頭老翘,則補(bǔ)全主機(jī)名(hostname)芹啥,主機(jī)名以列在/etc/hosts
文件里面的主機(jī)為準(zhǔn)。
自動補(bǔ)全相關(guān)的快捷鍵如下铺峭。
- Tab:完成自動補(bǔ)全墓怀。
-
Alt + ?
:列出可能的補(bǔ)全,與連按兩次 Tab 鍵作用相同卫键。 -
Alt + /
:嘗試文件路徑補(bǔ)全傀履。 -
Ctrl + x /
:先按Ctrl + x
,再按/
莉炉,等同于Alt + ?
钓账,列出可能的文件路徑補(bǔ)全碴犬。 -
Alt + !
:命令補(bǔ)全。 -
Ctrl + x !
:先按Ctrl + x
官扣,再按!
翅敌,等同于Alt + !
,命令補(bǔ)全惕蹄。 -
Alt + ~
:用戶名補(bǔ)全蚯涮。 -
Ctrl + x ~
:先按Ctrl + x
,再按~
卖陵,等同于Alt + ~
遭顶,用戶名補(bǔ)全。 -
Alt + $
:變量名補(bǔ)全泪蔫。 -
Ctrl + x $
:先按Ctrl + x
棒旗,再按$
,等同于Alt + $
撩荣,變量名補(bǔ)全铣揉。 -
Alt + @
:主機(jī)名補(bǔ)全。 -
Ctrl + x @
:先按Ctrl + x
餐曹,再按@
逛拱,等同于Alt + @
,主機(jī)名補(bǔ)全台猴。 -
Alt + *
:在命令行一次性插入所有可能的補(bǔ)全朽合。 -
Alt + Tab
:嘗試用.bash_history
里面以前執(zhí)行命令,進(jìn)行補(bǔ)全饱狂。
上面的Alt
鍵也可以用 ESC 鍵代替曹步。
其他快捷鍵
-
Ctrl + j
:等同于回車鍵(LINEFEED)。 -
Ctrl + m
:等同于回車鍵(CARRIAGE RETURN)休讳。 -
Ctrl + o
:等同于回車鍵讲婚,并展示操作歷史的下一個命令。 -
Ctrl + v
:將下一個輸入的特殊字符變成字面量俊柔,比如回車變成^M
磺樱。 -
Ctrl + [
:等同于 ESC。 -
Alt + .
:插入上一個命令的最后一個詞婆咸。 -
Alt + _
:等同于Alt + .
。
上面的Alt + .
快捷鍵芜辕,對于很長的文件路徑尚骄,有時會非常方便。因為 Unix 命令的最后一個參數(shù)通常是文件路徑侵续。
$ mkdir foo_bar
$ cd #按下 Alt + .
上面例子中倔丈,在cd
命令后按下Alt + .
憨闰,就會自動插入foo_bar
。