Conversion de bash en fonction de poisson (utilisez rga-fzf dans fish)

Dec 06 2020

J'essaye de convertir cette fonction bash / zsh en poisson. Je veux utiliser rga-fzf qui est une fonction pour zsh / bash en utilisant fzf avec ripgrep-all .

(ma coquille par défaut est le poisson)

Voici la fonction 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"
}

C'est jusqu'où je suis arrivé seul, et avec l'aide de ce post qui m'aide - et de ce 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

Cependant, maintenant, il ouvre simplement le dossier (actuel) et la notification

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

Si je change le $1 to $argv alors il n'y a pas de changement. Aussi pas de changement si je change$argv to "$argv "

Toute aide serait grandement appréciée!

MODIFIER Si je repasse la ligne en:

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

Ensuite, l'erreur a disparu, mais cela ne fait qu'ouvrir le dossier et non fzf

MODIFIER 2

J'ai changé le {q}

alors maintenant il lit:

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

L'erreur a disparu. Mais le problème persiste, il ne s'agit pas réellement d'ouvrir fzf.

EDIT 3 J'ai fait quelque chose de mal avec le premier set. Cela ne devrait pas être

set RG_PREFIX rga --files-with-matches 

mais

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

de plus, tout entre le () après le fzf devrait rester le même, donc actuellement je suis ici:

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

Maintenant, il ouvre au moins fzf mais il n'utilise réellement rga pour filtrer aucun des documents (fzf ouvre tous les fichiers disponibles dans le dossier) et la fenêtre d'aperçu montre:

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

où FILENAME est quelque chose comme les Directives 2-2019.pdf

donc Mmm un pas de plus, mais pas réellement en utilisant rgaet fzfensemble.

Réponses

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

C'est ce qui a fonctionné à la fin!