Convertendo bash em função de peixe (use rga-fzf em peixes)

Dec 06 2020

Estou tentando converter esta função bash / zsh em peixes. Quero usar rga-fzf que é uma função para zsh / bash usando fzf junto com ripgrep-all .

(minha concha padrão é peixe)

Aqui está a função zsh / fish:

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

Foi assim que eu fui longe por conta própria e com a ajuda deste post que ajuda - e deste post .

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

No entanto, agora ele simplesmente abre a pasta (atual) e a notificação

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

Se eu mudar o $1 to $argv então não há mudança. Também nenhuma mudança se eu mudar$argv to "$argv "

Qualquer ajuda seria muito apreciada!

EDITAR Se eu voltar a linha para:

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

Então o erro desaparece, mas ele só abre a pasta e não fzf

EDITAR 2

Eu mudei de volta o {q}

então agora lê:

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 "$1" \ --bind "change:reload:$RG_PREFIX {q}" \
                --preview-window="70%:wrap"
    ) &&
    open "$file"
end

O erro desapareceu. Mas o problema persiste, na verdade não está abrindo o fzf.

EDIT 3 Eu fiz algo errado com o primeiro conjunto. Isso não deveria ser

set RG_PREFIX rga --files-with-matches 

mas

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

além disso, tudo entre o () após o fzf deve permanecer o mesmo, então estou aqui:

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

Agora, pelo menos abre o fzf, mas na verdade não usa rga para filtrar nenhum dos documentos (o fzf abre todos os arquivos disponíveis na pasta) e a janela de visualização mostra:

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

em que FILENAME é algo como Guidelines 2-2019.pdf

então Mmm um passo mais perto, mas não usando rgae fzfjuntos.

Respostas

1 ABeehive Dec 08 2020 at 01:26
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

Isso é o que funcionou no final!