Konwersja bash do funkcji ryby (użyj rga-fzf w rybach)

Dec 06 2020

Próbuję przekonwertować tę funkcję bash / zsh na rybę. Chcę użyć rga-fzf, który jest funkcją dla zsh / bash przy użyciu fzf razem z ripgrep-all .

(moja domyślna muszla to ryba)

Oto funkcja 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"
}

Tak daleko zaszedłem sam i z pomocą tego posta, który pomaga - i tego postu .

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

Jednak teraz po prostu otwiera (bieżący) folder i powiadomienie

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

Jeśli zmienię $1 to $argv to nie ma żadnej zmiany. Nie zmieni się też, jeśli się zmienię$argv to "$argv ”

Każda pomoc byłaby bardzo mile widziana!

EDYCJA Jeśli zmienię linię z powrotem na:

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

Następnie błąd zniknął, ale nadal otwiera folder, a nie fzf

EDYCJA 2

Zmieniłem z powrotem {q}

więc teraz brzmi:

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

Błąd zniknął. Ale problem nadal występuje, tak naprawdę nie otwiera fzf.

EDYCJA 3 Zrobiłem coś nie tak z pierwszym zestawem. To nie powinno

set RG_PREFIX rga --files-with-matches 

ale

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

ponadto wszystko między () po fzf powinno pozostać takie samo, więc obecnie jestem tutaj:

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

Teraz przynajmniej otwiera fzf, ale w rzeczywistości nie używa rga do filtrowania żadnego z dokumentów (fzf otwiera wszystkie dostępne pliki w folderze), a okno podglądu pokazuje:

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

gdzie FILENAME to coś w rodzaju Guidelines 2-2019.pdf

więc Mmm o krok bliżej, ale właściwie nie używam rgai fzfrazem.

Odpowiedzi

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

To właśnie zadziałało w końcu!