在 zsh 中,我如何绑定(比如说)在点c-<cr>
插入?&>/dev/null &<cr>
我用的是urxvt。
答案1
有两个步骤:您需要让终端模拟器为Ctrl+发出不同的转义序列Return,并且您需要告诉 zsh 在键入该转义序列时要做什么。
终端中的应用程序接收字节序列,其中大部分要么形成可打印字符,要么是控制字符。大多数功能键和键和弦需要编码为转义序列,该序列由转义字符后跟几个对按下的键和键进行编码的字符组成。看键盘输入和文本输出如何工作?了解更多背景。Ctrl+没有标准的转义序列Return,大多数终端(包括 (U)rxvt)只是发送一个 CR 字符,就像普通的 一样Return。因此,您需要告诉 Urxvt 发送不同的转义序列。在您的 X 资源文件中(~/.Xresources
— 使用 加载它xrdb -merge ~/.Xresources
),添加
URxvt.keysym.C-Return: \033[27;5;13~
在 zsh 中,要将自定义代码绑定到键,请将该代码写入函数中,并将该函数声明为 zle 小部件zle -N
。在你的里面用户定义的小部件,变量BUFFER
包含正在编辑的行的内容,以及CURSOR
包含光标位置。要在光标周围插入文本,还有更方便的变量:您可以将文本附加到LBUFFER
将其插入到光标之前,或在前面添加文本RBUFFER
将其插入到光标后面。
我认为您想要做的是在行尾添加文本并运行当前命令。运行当前命令不是通过插入 CR 字符来完成的,这只是在命令中插入 CR。调用小部件accept-line
(默认绑定到 CR)来运行命令。
accept-line-run-in-background-with-output-hidden () {
BUFFER+=" &>/dev/null &"
zle accept-line
}
zle -N accept-line-run-in-background-with-output-hidden
bindkey $'\033[27;5;13~' accept-line-run-in-background-with-output-hidden