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