在 Bash Vi 模式下,按下一键后会自动进入插入模式

在 Bash Vi 模式下,按下一键后会自动进入插入模式

我正在使用带有 XFCE4 终端的 bash shell。我已经配置了 shell,使其处于 Vi 模式。

我通过在 ~/.bashrc 文件中添加以下行来完成此操作:

set -o vi

当在正常模式下的 shell 中时,我按下的第一个字符会在正常模式下输入,但随后会进入插入模式。

IE:

我处于正常模式。如果我按 b,我将返回一个单词并进入插入模式。

如果我按 bb,我将返回一个单词,进入插入模式,然后插入 b 字符。

另一个例子,如果我按 dd,第一个 d 将被普通模式捕获,然后我将进入插入模式,其中第二个 d 将被插入。

如果我手动输入set -o vishell(无论是否在我的 .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

相关内容