如何使用 bindkey 运行脚本?

Cha*_*ett 11 zsh

在 Z shell 中,如何使用 bindkey 将键序列绑定到脚本?

小智 12

我认为你不需要小部件:

bindkey -s '\eb' '/path/to/script.sh\n' 
Run Code Online (Sandbox Code Playgroud)

来自zsh 文档

除了 ZLE 命令之外,还可以使用“bindkey -s”将键序列绑定到其他字符串。

  • 在字符串末尾添加回车,插入后脚本将被执行,`bindkey -s '\eb' '/path/to/script.sh^M'` (4认同)
  • 这不会将 `Alt-B` 绑定到脚本,这会导致 `/path/to/script.sh\n` 被插入,就像键入一样。例如,如果您在输入“echo”后键入“Alt-B”,则只会运行“echo /path/to/script.sh”命令并让您返回到一个空提示符(使用您之前输入的“echo”)早点进入就消失了)。 (3认同)

Sté*_*las 6

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

my-script_widget() my-script its args
zle -N my-script_widget
bindkey '\ej' my-script_widget
Run Code Online (Sandbox Code Playgroud)

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

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

my-script_widget() zle -M "$(my-script its args)"
Run Code Online (Sandbox Code Playgroud)

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

my-script_widget() LBUFFER+=$(my-script its args)
Run Code Online (Sandbox Code Playgroud)