繁体   English   中英

有没有办法通过按键将 Bash 或 zsh 从 Emacs 模式切换到 vi 模式?

[英]Is there a way to switch Bash or zsh from Emacs mode to vi mode with a keystroke?

我希望能够暂时从 emacs 模式切换到 vi 模式,因为 vi 模式有时会更好,但我通常在输入某些内容到一半时才意识到我想使用 vi 模式。

我不想永久切换到 vi 模式,因为我通常更喜欢命令行上的 emacs 模式,主要是因为我已经习惯了,多年来,许多击键已经成为第二天性。 (作为一名编辑,我通常在 viper 模式下使用 emacs,这样我就可以同时使用 vi 和 emacs 击键,因为我发现自己一直不小心在 vi 中使用它们,把事情搞砸了,因为在某些情况下我发现 vi 击键更容易记住和方便,在其他情况下为 emacs。)

您可以创建切换,因为键绑定在vi模式和emacs模式之间是分开的。

$ set -o emacs
$ bind '"\ee": vi-editing-mode'
$ set -o vi
$ bind '"\ee": emacs-editing-mode'

现在Alt-e(或Esc e)将在模式之间切换。

PS1的定义中添加此项,以便在提示中显示您所处的模式。当您切换模式时,它不会立即显示更改,但会在发出新提示时更新。

$(set -o | grep emacs.*on >/dev/null 2>&1 && echo E || echo V)

啊哈! 我查看了readline源代码,发现你可以这样做:

 "\M-v": vi-editing-mode
 "\M-e": emacs-editing-mode

似乎没有切换,但这可能足够好!

为了后人的缘故,这是我原来的答案,对于那些没有读取功能的人来说,这可能是有用的。

这是一种可以设置它的方法,清除过程中的当前命令行。 我知道,这不是你想要的,但也许它会帮助找到这个问题的其他人。 在〜/ .inputrc中:

"\M-v": "\C-k\C-uset -o vi\C-j" # alt (meta)-v: set vi mode
"\M-e": "\C-k\C-uset -o vi\C-j" # alt (meta)-e: set emacs mode

或切换...这应该工作:

"\M-t": "\C-k\C-u[[ \"$SHELLOPTS\" =~ '\\bemacs\\b' ]] && set -o vi || set -o emacs\C-j"

这些基本上是别名,更进一步映射到readline中的键,这样您就不必键入别名并按Enter键。

以下.inputrc行允许Meta / Alt + Eemacsvi-insert模式之间切换。

同时对jk进行晃动将带您进入vi-command模式。

注意:唯一带有“kj”的英文单词是“blackjack”,没有单词包含“jk”)

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

注意:如果您将键keymap emacs下的绑定添加到vi-movement-mode以尝试直接切换到vi-command模式,如果您show-mode-in-prompt on ,则提示不会更新,因此上述工作 -需要周围。

我终于找到了如何使用单个键切换 vi 和 emacs 模式,例如 zsh 中的 [alt]+[i]:

# in the .zshrc
# toggle vi and emacs mode
vi-mode() { set -o vi; }
emacs-mode() { set -o emacs; }
zle -N vi-mode
zle -N emacs-mode
bindkey '\ei' vi-mode              # switch to vi "insert" mode
bindkey -M viins 'jk' vi-cmd-mode  # (optionally) exit to vi "cmd" mode
bindkey -M viins '\ei' emacs-mode  # switch to emacs mode

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM