如何使用bindkey在ZSH中运行脚本?

如何使用bindkey在ZSH中运行脚本?

在 ZSH 中,如何将bindkey按键序列绑定到脚本?

答案1

我认为你不需要小部件:

bindkey -s '\eb' '/path/to/script.sh\n' 

zsh 文档:

与 ZLE 命令一样,可以使用“bindkey -s”将键序列绑定到其他字符串。

答案2

您可以定义一个调用脚本的小部件:

my-script_widget() my-script its args
zle -N my-script_widget
bindkey '\ej' my-script_widget

但为什么要直接从 zle 调用脚本呢?

如果它显示任何东西,就会弄乱显示。如果您希望其输出显示为其他小部件消息,您可以执行以下操作:

my-script_widget() zle -M "$(my-script its args)"

或者,如果您希望将输出插入到光标处:

my-script_widget() LBUFFER+=$(my-script its args)

答案3

扩展一下@苏赛德的回答:

由于bindkey -s仅发送按键序列,因此如果提示符上已经有某些内容并且您尝试使用绑定,它只会在提示符处已有内容之后键入它。可以通过kill-whole-line在输入命令/脚本之前发送清除提示来解决此问题。

kill-whole-line通常绑定到^u( Ctrl+U),请参阅文档。如果不是,您可以通过以下方式绑定它:

bindkey '^u' kill-whole-line

然后,你可以这样做:

bindkey -s '\eb' '^u/path/to/script.sh^M'

它绑定Alt+b在输入字符之前杀死当前行,然后发送^M(换行符)。

相关内容