我有几个关于 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