在 Bash Vi 模式下,一鍵按下後我會自動進入插入模式
我正在使用帶有 XFCE4 終端的 bash shell。我已經配置了 shell,使其處於 Vi 模式。
我通過在 ~/.bashrc 文件中添加以下行來完成此操作:
set -o vi
在正常模式下的外殼中,我按的第一個字元在正常模式下輸入,但隨後我在插入模式下被拋出。
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
在閱讀了@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