Bash

在 Bash Vi 模式下,一鍵按下後我會自動進入插入模式

  • December 28, 2020

我正在使用帶有 XFCE4 終端的 bash shell。我已經配置了 shell,使其處於 Vi 模式。

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

set -o vi

在正常模式下的外殼中,我按的第一個字元在正常模式下輸入,但隨後我在插入模式下被拋出。

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

在閱讀了@Patrick 的評論後,我解決了我的問題

您描述的行為是emacs模式。

這讓我意識到我不是在 vi 模式下。我也把

set -o vi

在我的 .bash_profile 中輸入,現在一切正常。這很奇怪,因為從我讀到的 .bash_profile 用於登錄 shell,而 .bashrc 用於互動式非登錄 shell,我相信這是我的情況。

您的問題是您仍處於 emacs 模式。但是,我認為更好的方法是更改​​您的.inputrc文件,而不是.bashrc. 這樣,使用 GNU readline 的所有內容都與您的 shell 保持一致(並且它適用於 bash 以外的其他 shell)。

我將以下內容添加到我的.inputrc. j它預設為我提供 vi 模式,並通過k連續快速按鍵將我置於 vi 的“正常”模式。由於這些鍵位於主行,因此比伸手要容易得多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

引用自:https://unix.stackexchange.com/questions/89618