向 ZSH 的行编辑器 (ZLE) 添加更多类似 Emacs 的绑定

Ame*_*ina 5 zsh line-editor

我有几个关于 Zsh 中类似 emacs 的键盘绑定的问题。作为所有问题的背景:我已经激活了类似 Emacs 的键绑定bindkey -e(默认激活)

复制和区域突出显示:

在 Emacs 中,如果您运行C-space( set-mark),选择一个区域,然后使用 复制它M-w,Emacs 会将该区域放入删除环并停止选择文本(即,如果我移动该点,则不再选择文本)。

但是,我无法在ZLE 中获得相同的行为。使用 复制区域后M-W,选择模式仍处于开启状态,如果我移动光标,选择会不断变化。

停止选择:

在 Emacs 中,如果我选择一个区域,然后按C-g,则选择停止(当前标记被杀死)。在 Zsh 中,默认情况下,C-g在 shell 中开始一个新行。那么是否有一个 ZLE 命令可以绑定到(可能使用与 不同的东西C-g)来停止正在进行的选择?

Gil*_*il' 3

要停用选择,请set-mark-command使用负参数运行:ESC - Ctrl+Space

要复制区域并停用选择,请编写一个执行这两个操作的函数,然后将其声明为小部件zle -N并将该小部件绑定到键。

copy-region-as-kill-deactivate-mark () {
  zle copy-region-as-kill
  zle set-mark-command -n -1
}
zle -N copy-region-as-kill-deactivate-mark
bindkey '\ew' copy-region-as-kill-deactivate-mark
Run Code Online (Sandbox Code Playgroud)