我编写了一个简单的函数,当我使用 exa 和 peco 按下 ctrl+f 时,搜索当前文件夹,然后选择一个目录,然后我想通过 cd 进入该目录。
(ll 是 ls 的修改版本)
pecofunc() {
ll | peco --layout=bottom-up | read foo
foo="${foo##* }"
if [ -n "$foo" ]
then
builtin cd "$foo"
fi
# refresh terminal and end execution
}
zle -N pecofunc pecofunc
bindkey '^f' pecofunc
这部分运行良好,但执行后我的目录并没有明显改变,直到我按下回车键或使用其他命令。
图片1 在做任何事情之前先使用终端
图片2按下 ctrl+f 后
图片4再次按 Enter
再次按下回车键会刷新我所在的文件夹,但会创建另一个不可接受的新行。
我该如何避免这个问题?
答案1
从任何交互工具返回后,都需要调用键处理函数zle -I
,以使当前显示无效并强制 ZSH 重新绘制命令行。
似乎打印一个空行前运行该工具很有用,可以避免覆盖当前提示。
pecofunc() {
echo ""
ll | peco | read foo
zle -I
if ... then cd ... fi
}