Bash in Fischfunktion umwandeln (rga-fzf in Fisch verwenden)

Dec 06 2020

Ich versuche, diese Bash / Zsh-Funktion in Fisch umzuwandeln. Ich möchte rga-fzf verwenden, eine Funktion für zsh / bash, bei der fzf zusammen mit ripgrep-all verwendet wird .

(Meine Standardschale ist Fisch)

Hier ist die zsh / fish-Funktion:

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

So weit bin ich alleine gekommen und mit etwas Hilfe von diesem Beitrag, der hilft - und diesem Beitrag .

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

Jetzt werden jedoch einfach der (aktuelle) Ordner und die Benachrichtigung geöffnet

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

Wenn ich das ändere $1 to $Dann gibt es keine Änderung. Auch keine Änderung, wenn ich mich ändere$argv to "$argv "

Jede Hilfe wäre sehr dankbar!

BEARBEITEN Wenn ich die Zeile zurück ändere zu:

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

Dann ist der Fehler weg, aber es öffnet nur noch den Ordner und nicht fzf

BEARBEITEN 2

Ich habe das zurück geändert {q}

jetzt heißt es also:

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

Der Fehler ist weg. Aber das Problem bleibt bestehen, es öffnet sich nicht wirklich fzf.

EDIT 3 Ich habe mit dem ersten Satz etwas falsch gemacht. Das sollte nicht sein

set RG_PREFIX rga --files-with-matches 

aber

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

außerdem sollte alles zwischen () nach dem fzf gleich bleiben, also bin ich momentan hier:

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

Jetzt öffnet es zumindest fzf, aber es verwendet nicht rga, um eines der Dokumente zu filtern (fzf öffnet alle verfügbaren Dateien im Ordner) und das Vorschaufenster zeigt:

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

wobei FILENAME so etwas wie Richtlinien 2-2019.pdf ist

also Mmm einen Schritt näher, aber nicht wirklich mit rgaund fzfzusammen.

Antworten

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

Das hat am Ende funktioniert!