set -o vi in .bashrc

    大家都知道,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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值