【问题标题】:How to make zsh keybind between emacs mode and vi mode?如何在 emacs 模式和 vi 模式之间进行 zsh 键绑定?
【发布时间】:2021-04-12 19:37:17
【问题描述】:

我想绑定一个键来切换emacs模式和vi模式,我使用的是oh-my-zsh插件(vi-mode)。

我试过Is there a way to switch Bash or zsh from Emacs mode to vi mode with a keystroke?

我也尝试像
bindkey '^[e' 'set -o emacs'
bindkey '^[v' 'set -o vi' 这样绑定key

但这对我不起作用。

有什么方法可以切换 vi/emacs 或 keybind 来设置键盘映射?
非常感谢!

【问题讨论】:

    标签: zsh oh-my-zsh


    【解决方案1】:

    bindkey 用于将键绑定到 ZLE 小部件,而不是任何随机命令。所以你猜到的东西是行不通的。您可以编写一个自定义 ZLE 小部件来切换键盘映射:

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

    实际上,我不建议这样做。如果您想要混合方法,最好选择 emacs 模式但将密钥绑定到 vi-cmd-mode。事实上 Ctrl-X,Ctrl-V 默认绑定到这个。您甚至可以将转义键绑定到 vi-cmd-mode - 其中 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' select-vi 但是如果将 -o emcas 设置为键绑定 Alt-v(切换到 vi 模式)或将 -o vi 设置为键绑定,它仅适用于一种方式Alt-e(切换到emacs模式)
    • 但是不能从Alt-e 切换到Alt-v 或者Alt-v 到Alt-e 然后这个函数的设置不会写到os? set -o | grep 'emacs\|^vi' 不会改变 因为这是local keymaps ?
    • 为了能够来回切换,您需要在vi 键盘映射中绑定select-emacs,在emacs 键盘映射中绑定select-vi。对bindkey 使用-M 选项。本地键盘映射与整个问题完全无关。
    • 感谢它的工作!但我很好奇为什么 zsh 设置没有改变? set -o | grep 'emacs\|^vi 键盘映射设置不会改变。
    • zsh 键盘映射设置由bindkey 控制和查看,这不是一个真正的选择。为实现 ksh 和 bash 兼容性,后来添加了对执行 set -o emacs 等的支持。
    猜你喜欢
    • 2011-04-07
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多