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

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

我有几个关于 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)来停止正在进行的选择?

答案1

要停用选择,请运行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

相关内容