我正在使用带有 XFCE4 终端的 bash shell。我已经配置了 shell,使其处于 Vi 模式。
我通过在 ~/.bashrc 文件中添加以下行来完成此操作:
set -o vi
当在正常模式下的 shell 中时,我按下的第一个字符会在正常模式下输入,但随后会进入插入模式。
IE:
我处于正常模式。如果我按 b,我将返回一个单词并进入插入模式。
如果我按 bb,我将返回一个单词,进入插入模式,然后插入 b 字符。
另一个例子,如果我按 dd,第一个 d 将被普通模式捕获,然后我将进入插入模式,其中第二个 d 将被插入。
如果我手动输入set -o vi
shell(无论是否在我的 .bashrc 中),我将不会得到此行为,而是得到正常行为。我知道我的 .bashrc 中的更改正在被读取,因为我不在 Emacs 模式下。
我正在使用 bash 4.2.45(1)-release。
这是我的 .bashrc 的完整内容:
PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting
PATH=$PATH:/home/bleakcabal/.rvm/gems/ruby-2.0.0-p247/bin
set -o vi
答案1
我在阅读@Patrick 的评论后解决了我的问题
您所描述的行为是 emacs 模式。
这让我意识到我没有处于 vi 模式。我还把
set -o vi
输入我的 .bash_profile ,现在一切正常。这很奇怪,因为从我读到的内容来看, .bash_profile 用于登录 shell, .bashrc 用于交互式非登录 shell,我相信这就是我的情况。
答案2
您的问题是您仍处于 emacs 模式。但是,我认为更好的方法是更改文件.inputrc
,而不是.bashrc
.这样,使用 GNU readline 的所有内容都与您的 shell 保持一致(并且它适用于 bash 以外的其他 shell)。
我将以下内容添加到我的.inputrc
.它默认为我提供 vi 模式,并且通过连续快速j
按键将我置于 vi 的“正常”模式。k
由于这些键位于主行,因此比伸手触摸 容易得多esc
,并且“jk”在文本中是一种罕见的组合。
# Make GNU readline (including bash) use vi-mode
set editing-mode vi
set vi-ins-mode-string \1\e[6 q\2
set vi-cmd-mode-string \1\e[2 q\2
set keymap vi-insert
"jk": vi-movement-mode