Bash

使 Bash 的 vi 模式預設為“普通”Vi 模式(不是“插入”),並將游標放在行首,模仿 KornShell

  • December 5, 2018

ksh當 shell 處於 Vi 命令行編輯模式時,我試圖讓 Bash 模仿 KornShell93 ( ) 的行為。

KornShell 預設為“Vi 普通模式”(又名“命令”模式),並且在向後瀏覽命令行歷史記錄時,它還會將游標置於命令行的最開始處。這與 Bash 形成對比,後者將您置於“Vi 插入模式”並位於命令行的末尾。

在“ Bash vi 模式配置預設為命令模式”的答案中,幾乎可以得出結論,當啟用 Vi 命令行編輯時,沒有辦法讓 Bash 預設為“Vi 普通模式”。

這已經是五年多以前的事了,我想知道從那以後情況是否發生了變化?

那麼自動將游標放在命令行的開頭呢?是否有一些我不知道的 Readline 魔法可以幫助我解決這個問題?

shells/bash在 OpenBSD-current(2017 年 1 月)上使用從原始碼(OpenBSD 埠)編譯的 Bash 版本 4.4.5(1)-release。

似乎沒有足夠的方法在命令行中插入 Esc。

雖然在vi-insert大多數alpha/numeric情況下都使用了鍵。Esc 距離很遠,任何和弦(如Alt-j(有效))似乎都比預期的複雜。因此,有一種方法可以將兩個鍵轉換為可配置的字元串。

解決方法通過使用此答案中的想法來工作

只需將其添加到.inputrc

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 emacs
"\ee": vi-editing-mode
"jk": "\eejk"
"kj": "\eejk"

set keymap vi-insert
"\ee": emacs-editing-mode
"jk": vi-movement-mode
"kj": vi-movement-mode

set keymap vi-command
"\ee": emacs-editing-mode

這樣,無論您從哪裡開始emacsvi,按下兩者jk都會將您置於 vi-command 模式的行首

此外,它還允許您使用-切換到emacs模式。Esc``e

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