希望你做得很好。
我有以下内容.zshrc
:
# 1. invoke zoxide to pick dir
# 2. open target dir in ranger
# 3. when exiting ranger, cd into last dir
zoxide_to_ranger () {
eval 'ranger "$(zoxide query -i)" --choosedir=$HOME/.rangerdir < $TTY'
LASTDIR=$(< ~/.rangerdir)
cd "$LASTDIR" || exit
# ensure `precmds` are run after `cd`
local precmd
for precmd in $precmd_functions; do
$precmd
done
zle reset-prompt
}
zle -N zoxide_to_ranger
bindkey '^f' zoxide_to_ranger
正如内联评论中所建议的那样,它是一个方便的工具,当我触发时Ctrl-f
,它会提示我一个 fzf 菜单,并且在选择后它将在该目录中打开 ranger。
问题是,当我想通过按 取消选择时Esc
,它仍然会打开 ranger 并向我发送主目录,这不是我想要的。
所以我的问题是,如何在触发bindkey后取消这样的zle功能?
配置:
zsh 5.9 (x86_64-pc-linux-gnu)
操作系统:Manjaro Linux
非常感谢任何输入。谢谢:)
这
eval
条线正在做几件事。可能东西太多了。一种方法是分离zoxide
调用,并检查它是否返回了一些东西。另一个需要是检查其中是否~/.rangerdir
有目录(或其他东西),并在使用后清空该文件。这些新检查创建了函数必须清理和退出的多个点: