set -o vi

你們都知道,shell命令行有兩種編輯模式emacs- modevi- 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
相關文章
相關標籤/搜索