如何在emacs模式和vi模式之间进行zsh键绑定?

如何在emacs模式和vi模式之间进行zsh键绑定?,zsh,oh-my-zsh,Zsh,Oh My Zsh,我想绑定一个键来切换emacs模式和vi模式,我使用oh my zsh plugins() 我试过了 我也尝试像 bindkey'^[e''集合-o emacs' bindkey'^[v''集-o vi' 但这对我不起作用 有没有办法切换vi/emacs或keybind来设置keymap? 非常感谢!bindkey用于将密钥绑定到ZLE小部件,而不是任何随机命令。因此,您所猜测的不会起作用。您可以编写自定义ZLE小部件来切换密钥映射: select-emacs() { set -o emacs

我想绑定一个键来切换emacs模式和vi模式,我使用oh my zsh plugins()

我试过了

我也尝试像
bindkey'^[e''集合-o emacs'

bindkey'^[v''集-o vi'

但这对我不起作用

有没有办法切换vi/emacs或keybind来设置keymap?

非常感谢!

bindkey
用于将密钥绑定到ZLE小部件,而不是任何随机命令。因此,您所猜测的不会起作用。您可以编写自定义ZLE小部件来切换密钥映射:

select-emacs() { set -o emacs }
zle -N select-emacs
bindkey '^[e' select-emacs

实际上,我不建议这样做。如果你想要一种混合方法,最好选择emacs模式,但将一个键绑定到
vi cmd模式
。事实上,默认情况下Ctrl-X、Ctrl-V都绑定到这个模式。你甚至可以将escape键绑定到
vi cmd模式
——其中emacs键序列涉及到初始转义按键,这通常可以替换为Alt。如果您习惯于使用实际的escape键键入它,则可以在vi命令模式下用自定义小部件替换它。

bindkey
用于将键绑定到ZLE小部件,而不是任何随机命令。因此,您猜测的不会起作用。您可以编写自定义ZLE小部件来切换键映射:

select-emacs() { set -o emacs }
zle -N select-emacs
bindkey '^[e' select-emacs

实际上,我不建议这样做。如果你想要一种混合方法,最好选择emacs模式,但将一个键绑定到
vi cmd模式
。事实上,默认情况下Ctrl-X、Ctrl-V都绑定到这个模式。你甚至可以将escape键绑定到
vi cmd模式
——其中emacs键序列涉及到初始转义按键,这通常可以替换为Alt。如果您习惯于使用实际的转义键键入它,则可以在vi命令模式下用自定义小部件替换它。

我尝试这样绑定键:function select-emacs(){set-o emacs}zle-N select emacs bindkey'^[e'select emacs function select-vi(){set-o vi}zle-N select vi bindkey'^[v'选择vi,但如果将-o emcas设置为键绑定Alt-v(切换到vi模式)或将-o vi设置为键绑定Alt-e(切换到emacs模式),则它仅适用于一种方式但它不能从Alt-e切换到Alt-v或从Alt-v切换到Alt-e,然后,通过此功能进行的设置将不会写入操作系统?
set-o | grep'emacs\^vi'
不会更改,因为这是?要能够来回切换,您需要在
vi
键映射中绑定
选择emacs
,并在
emac>中选择vi
skeymap。使用
-M
选项来
bindkey
。本地keymap与整个问题完全无关。谢谢!但我很好奇为什么zsh设置不更改?
set-o | grep'emacs\^vi
keymap设置不会更改。zsh keymap设置由
bindkey
控制和查看,这不是一个真正的选项。为了ksh和bash的兼容性,后来增加了对执行
set-oEmacs
etc的支持。我尝试这样绑定键:function select-emacs(){set-oEmacs}zle-N select emacs bindkey'^[e'select emacs function select-vi(){set-ovi}zle-N select vi bindkey'^[v'选择vi,但如果将-o emcas设置为键绑定Alt-v(切换到vi模式)或将-o vi设置为键绑定Alt-e(切换到emacs模式),则它仅适用于一种方式但它不能从Alt-e切换到Alt-v或从Alt-v切换到Alt-e,然后,通过此功能进行的设置将不会写入操作系统?
set-o | grep'emacs\^vi'
不会更改,因为这是?要能够来回切换,您需要在
vi
键映射中绑定
选择emacs
,并在
emac>中选择vi
skeymap。使用
-M
选项来
bindkey
。本地keymap与整个问题完全无关。谢谢!但我很好奇为什么zsh设置不更改?
set-o | grep'emacs\^vi
keymap设置不会更改。zsh keymap设置由
bindkey
控制和查看,这不是一个真正的选择。为了ksh和bash的兼容性,后来增加了对set-oEmacsetc的支持。