Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bindkey在zsh中调用函数需要在函数运行后按enter键_Zsh_Zshrc - Fatal编程技术网

使用bindkey在zsh中调用函数需要在函数运行后按enter键

使用bindkey在zsh中调用函数需要在函数运行后按enter键,zsh,zshrc,Zsh,Zshrc,我是zsh新手,正在尝试使用我的.zshrc中的以下内容将键序列绑定到函数: say_hello(){ echo "hello" } zle -N say_hello bindkey '^Y' say_hello 按Ctrl-Y键将调用该函数,我将看到“hello”打印到终端,但在我需要再次按Enter键之后,我会收到另一个zsh提示。只需在zsh提示符下键入say_hello并按Enter键即可调用该函数-我看到hello已打印,然后会收到另一个zsh提示符。将函数绑定到键序列时,如

我是zsh新手,正在尝试使用我的
.zshrc
中的以下内容将键序列绑定到函数:

say_hello(){
    echo "hello"
}
zle -N say_hello
bindkey '^Y' say_hello
按Ctrl-Y键将调用该函数,我将看到“hello”打印到终端,但在我需要再次按Enter键之后,我会收到另一个zsh提示。只需在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'

要在zle小部件中显示消息,应该使用
zle-M
而不是
echo
echo
将在当前光标位置的任何位置输出您的消息,这并不是特别有用。如果您真的想使用echo,那么之后调用
zle reset prompt
将重新绘制一个新的提示。如果您不想在终端中出现潜在的混乱,请考虑用<代码> \r>代码>将光标移到行的开头,以<代码> $TyMCAP[CE]结束。清除到行尾。

您是想在
^Y
上运行命令,还是只想在命令行中插入文本?@MartinTournoij否我真正想运行的功能包括更改当前目录,我只是使用示例中的
echo
命令来说明我不理解的行为;在键入下一个命令之前,无需按Enter键(重新显示提示)。输出只是将“hello”和一个换行符写入到终端,而终端会在同一位置回显您的输入。您可能会对
print-z
感兴趣,它将直接写入输入缓冲区,就像您输入了文本一样。这可能是让
zle
调用函数“带外”的另一种选择。@chepner谢谢。因此,我添加了一个我真正想要的示例—一个更改工作目录的函数,它使用keybinding运行。你能推荐一下如何进行这项工作,以便在函数完成后给我zsh提示吗?很高兴知道,但是我只是在这里使用
echo
来显示我不理解的行为-我真正想在函数中做的不仅仅是打印一些东西Woops错过了这个答案的
zle reset prompt
部分-这是我所寻找的关键部分