如何在函数调用后刷新终端

如何在函数调用后刷新终端

我编写了一个简单的函数,当我使用 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 后

图片 3选择 test2 并按 Enter 键

图片4再次按 Enter

再次按下回车键会刷新我所在的文件夹,但会创建另一个不可接受的新行。

我该如何避免这个问题?

答案1

从任何交互工具返回后,都需要调用键处理函数zle -I,以使当前显示无效并强制 ZSH 重新绘制命令行。

似乎打印一个空行运行该工具很有用,可以避免覆盖当前提示。

pecofunc() {
    echo ""
    ll | peco | read foo
    zle -I
    if ... then cd ... fi
}

相关内容