你们都知道,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