在zsh中使用bindkey调用函数需要在函数运行后按回车
Using bindkey to call a function in zsh requires pressing enter after function runs
我是 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
开头将光标移动到行首,以 $termcap[ce]
结尾以清除行尾。
我是 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
开头将光标移动到行首,以 $termcap[ce]
结尾以清除行尾。