Conversión de bash a función fish (use rga-fzf en fish)

Dec 06 2020

Estoy tratando de convertir esta función bash / zsh en pescado. Quiero usar rga-fzf, que es una función para zsh / bash usando fzf junto con ripgrep-all .

(mi caparazón predeterminado es el pescado)

Aquí está la función 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"
}

Esto es lo lejos que llegué por mi cuenta y con la ayuda de esta publicación que ayuda, y esta publicación .

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

Sin embargo, ahora simplemente abre la carpeta (actual) y la notificación

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

Si cambio el $1 to $argv, entonces no hay cambios. Tampoco hay cambio si cambio$argv to "$argv "

¡Cualquier ayuda será muy apreciada!

EDITAR Si cambio de nuevo la línea a:

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

Luego, el error desaparece, pero solo abre la carpeta y no fzf

EDITAR 2

He cambiado de nuevo el {q}

entonces ahora dice:

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

El error desapareció. Pero el problema persiste, en realidad no está abriendo fzf.

EDITAR 3 Hice algo mal con el primer set. Esto no debería ser

set RG_PREFIX rga --files-with-matches 

pero

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

además, todo entre () después de fzf debería permanecer igual, así que actualmente estoy aquí:

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

Ahora al menos abre fzf pero en realidad no usa rga para filtrar ninguno de los documentos (fzf abre todos los archivos disponibles en la carpeta) y la ventana de vista previa muestra:

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

donde FILENAME es algo así como Guidelines 2-2019.pdf

así que mmm un paso más cerca, pero no usando rgay fzfjuntos.

Respuestas

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

¡Esto es lo que funcionó al final!