将 bash 转换为 fish 函数(在 fish 中使用 rga-fzf)

Converting bash to fish function (use rga-fzf in fish)

我正在尝试将此 bash/zsh 函数转换为鱼。我想使用 rga-fzf,它是 zsh/bash 的函数,将 fzf 与 ripgrep-all.

一起使用

(我的默认 shell 是鱼)

这是 zsh/fish 函数:

rga-fzf() {
    RG_PREFIX="rga --files-with-matches"
    local file
    file="$(
        FZF_DEFAULT_COMMAND="$RG_PREFIX ''" \
            fzf --sort --preview="[[ ! -z {} ]] && rga --pretty --context 5 {q} {}" \
                --phony -q "" \
                --bind "change:reload:$RG_PREFIX {q}" \
                --preview-window="70%:wrap"
    )" &&
    echo "opening $file" &&
    xdg-open "$file"
}

这是我自己完成的,并得到了 which helps - and this post 的帮助。

function fif
    set RG_PREFIX rga --files-with-matches
    set -l file
    set file (
        set FZF_DEFAULT_COMMAND $RG_PREFIX "" \
            fzf --sort --preview test ! -z {} && rga --pretty --context 5 $argv {} \
                --phony -q "" \
                --bind "change:reload:$RG_PREFIX $argv" \
                --preview-window="70%:wrap"
    ) &&
    open "$file"
end

但是,现在它只是打开(当前)文件夹和通知

error: Found argument '--phony' which wasn't expected, or isn't valid in this context

如果我将 $1 更改为 $argv,则不会有任何变化。如果我将 $argv 更改为 "$argv"

也没有变化

如有任何帮助,我们将不胜感激!

编辑 如果我将行改回:

            fzf --sort --preview "[[ ! -z {} ]] && rga --pretty --context 5 {q} {}" \

然后错误消失了,但它仍然打开文件夹而不是 fzf

编辑 2

我已经改回 {q}

现在它显示为:

function fif
    set RG_PREFIX rga --files-with-matches
    set -l file
    set file (
        set FZF_DEFAULT_COMMAND $RG_PREFIX "$argv" \
            fzf --sort --preview "[[ ! -z {} ]] && rga --pretty --context 5 {q} {}" \
                --phony -q "" \
                --bind "change:reload:$RG_PREFIX {q}" \
                --preview-window="70%:wrap"
    ) &&
    open "$file"
end

错误消失了。 但是问题依旧,实际上并没有打开fzf

编辑 3 我做错了第一组。这不应该

set RG_PREFIX rga --files-with-matches 

但是

set -x RG_PREFIX rga --files-with-matches

此外,fzf 之后的 () 之间的所有内容都应保持不变 所以目前我在这里:

function fif
    set -x RG_PREFIX rga --files-with-matches
    set -l file
    set file (
        FZF_DEFAULT_COMMAND="$RG_PREFIX ''" \
            fzf --sort --preview="[[ ! -z {} ]] && rga --pretty --context 5 {q} {}" \
                --phony -q "" \
                --bind "change:reload:$RG_PREFIX {q}" \
                --preview-window="70%:wrap"
    ) &&
    open "$file"
end

现在它至少打开了 fzf 但它实际上并没有使用 rga 来过滤任何文档(fzf 打开文件夹中的所有可用文件)并且预览 window 显示:

fish: Unknown command: '[[ ! -z FILENAME ]]' 
fish: 
[[ ! -z 'FILENAME' ]] && rga  --pretty --context 5 '' 'FILENAME'

FILENAME 类似于 Guidelines 2-2019.pdf

所以嗯更近了一步,但实际上并没有同时使用 rgafzf

function fif
    set -x RG_PREFIX rga --files-with-matches
    set -l file
    set file (
        FZF_DEFAULT_COMMAND="$RG_PREFIX '$argv'" \
            fzf --sort --preview="[ ! -z {} ] && rga --pretty --context 5 {q} {}" \
                --phony -q "$argv" \
                --bind "change:reload:$RG_PREFIX {q}" \
                --preview-window="70%:wrap"
    ) &&
    open "$file"
end

这就是最终的效果!