你們都知道,shell命令行有兩種編輯模式emacs-
mode和
vi-
mode。我我的比較喜歡用
vi-
mode。這樣在敲命令的時候就不用把手移到方向鍵上去。很是方便。使用 "set -o
vi" 啓用
vi-
mode,使用 "set -o emacs" 啓用emacs-
mode。
可是我今天發現了一件很是奇怪的事情。應該是bash的一個bug。我把 "set -o
vi" 寫在 ~/.bashrc 裏面(爲何?你懂的),當我打開新的shell時,發現
vi-
mode不起做用。而後我把 "set -o
vi" 從 ~/.bashrc 中註釋掉,在開啓一個新的shell,手動輸入 "set -o
vi",這時候一切正常。通過長時間的反覆嘗試,最後發現只要是在 ~/.bashrc 裏面加上 "set -o
vi" 就會讓
vi-
mode永久失效。而emacs-
mode老是正常的。汗~ 莫非bash的開發者和
vi的開發者有深仇大恨??
後來上網查了下,發現是和 /etc/
inputrc 衝突了。具體緣由不詳。貌似是
INPUTRC機制和
vi-
mode衝突了。歡迎知道的同窗解釋一下。最後找到兩種解決方法。
1. 建立一個空文件 "~/.
inputrc",這樣可以覆蓋 /etc/
inputrc 的配置,在 ~/.bashrc 中加入 "set -o
vi"。
2. 把 ~/.bashrc 中的 "set -o
vi" 註釋掉,在 "~/.
inputrc」 中加入 "set editing-
mode
vi"。
第一種方法是直接去掉了
inputrc的配置,這樣可能沒法在命令行中輸入雙字節(如漢字),第二種方法就能完美的保留
inputrc的配置而且是bash默認使用
vi-
mode,方法是複製 /etc/
inputrc 到 ~/.
inputrc 在執行方法2。
補充:個人操做系統內核是Linux 2.4.30。不知道其餘版本的有沒有這個問題。
2011/5/27 - 後記:今天好像發現了這個問題的緣由了。狀況多是這樣的。
inputrc中經過其餘機制(和"set -o
vi"不一樣的機制,並且這個機制有bug)默認設置了emacs-
mode,並覆蓋了bashrc中的"set -o
vi"。如今看來應該是
inputrc機制的開發人員和
vi有仇了。下面步驟是比較官方的解決方法:
1. 在bashrc中加入如下代碼
set -o vi
2. 在
inputrc中加入如下代碼
$if mode=vi
set editing-mode vi
set keymap vi$endif