【发布时间】:2020-06-04 23:11:46
【问题描述】:
我是 zsh 的新手,正在尝试将键序列绑定到我的 .zshrc 中具有以下内容的函数:
say_hello(){
echo "hello"
}
zle -N say_hello
bindkey '^Y' say_hello
按 Ctrl-Y 将调用该函数,我会看到“hello”打印到终端,但在我得到另一个 zsh 提示之前,我需要再次按 Enter。只需在 zsh 提示符处输入 say_hello 并按 Enter 即可调用该函数,这可以实现我想要的 - 我看到打印了 hello,然后我得到了另一个 zsh 提示符。将函数绑定到键序列时如何获得此行为?
上面是一个简单的例子,我要写的函数如下:
my_cd() {
if [[ "$#" -ne 0 ]]; then
cd $(autojump $@)
return
fi
dir_to_cd_to=$(fasd_cd -dl | fzf --height 40% --reverse --inline-info)
# above isn't so important - dir_to_cd_to could be obtained in any way
cd "$dir_to_cd_to"
}
zle -N my_cd
bindkey -v '^Y' 'my_cd'
【问题讨论】:
-
您是打算在
^Y上运行命令还是只是在命令行中插入文本? -
@MartinTournoij 不,我真正想运行的功能涉及更改当前目录,我只是在此处的示例中使用
echo命令来说明我不理解的行为。跨度> -
严格来说,
zsh已经在等待你的输入了;在输入下一个命令之前,您不需要 按 Enter 键(导致重新显示提示)。输出只是将“hello”和一个换行符写到终端中,您的输入将被终端回显。 -
您可能对
print -z感兴趣,它会直接写入输入缓冲区,就像您输入了文本一样。可以这么说,这可能是让zle调用“带外”函数的替代方法。 -
@chepner 谢谢。所以我添加了一个我真正想要的示例 - 一个更改工作目录的函数,它使用键绑定运行。你能推荐一下如何使这项工作,以便在函数完成后我会得到我的 zsh 提示符吗?