如何在Zsh中为fzf命令定义可用的自定义预览函数?
解决fzf预览中调用自定义函数的问题
问题原因
你在zsh环境下使用了bash风格的函数导出方式(export -f),但zsh默认不会将函数导出到子shell中,而fzf的预览命令是在子shell里执行的,所以会出现command not found: foo的错误。
三种可行解决方案
方案1:让fzf用bash执行预览命令
保持原函数定义和导出方式不变,修改fzf命令,指定用bash来执行预览:
foo() { echo "bar" } export -f foo fzf --preview 'bash -c "foo"'
方案2:在zsh中开启函数导出选项
zsh需要先开启functions_export选项,才能让export -f生效,步骤如下:
# 开启函数导出选项 setopt functions_export # 定义并导出函数 foo() { echo "bar" } export -f foo # 正常调用fzf预览 fzf --preview "foo"
方案3:直接在预览命令中定义函数
如果函数逻辑简单,可以直接把函数定义写在预览命令里,无需提前导出:
fzf --preview 'foo() { echo "bar"; }; foo'
内容的提问来源于stack exchange,提问作者Jiri Kremser
相关产品推荐
相关产品推荐

