希望你做得很好。
我的.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菜单,在选择时它会在dir中打开游标符。
问题是,当我想通过按Esc取消选择时,它仍然会打开护林员并发送给我home dir,这不是我想要的。
因此,我的问题是,在触发bindkey之后,如何取消这样的zle函数?
配置:
zsh 5.9 (x86_64-pc-linux-gnu)
操作系统: Manjaro Linux
任何投入都是非常感谢的。谢谢您:)
发布于 2022-07-05 12:39:29
eval线正在做几件事。可能太多了。一种方法是分离zoxide调用,并检查它是否返回了什么。另一种需要是检查~/.rangerdir中是否有目录(或其他什么),并在使用后清空该文件。这些新检查创建了函数必须清理和退出的多个点:
function zoxide_to_ranger {
local zz; zz=$(zoxide query -i)
[[ -z $zz ]] && { zle reset-prompt; return }
# not sure if the 'eval' is necessary; does ranger ever exit with
# shell commands to be run?
ranger $zz --choosedir=~/.rangerdir < $TTY
local dd; dd=$(< ~/.rangerdir)
[[ -z $dd ]] && { zle reset-prompt; return }
:> ~/.rangerdir
# this could be "local" unless you use it elsewhere
LASTDIR=$dd
cd $LASTDIR || { zle reset-prompt; return }
local precmd; for precmd in $precmd_functions; $precmd
zle reset-prompt
}https://unix.stackexchange.com/questions/708627
复制相似问题