Преобразование bash в функцию рыбы (используйте rga-fzf в fish)

Dec 06 2020

Я пытаюсь преобразовать эту функцию bash / zsh в рыбу. Я хочу использовать rga-fzf, который является функцией для zsh / bash, использующей fzf вместе с ripgrep-all .

(моя оболочка по умолчанию - рыба)

Вот функция 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"
}

Вот как далеко я продвинулся в одиночку и с некоторой помощью этого поста, который помогает - и этого поста .

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

Однако теперь он просто открывает (текущую) папку и уведомление

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

Если я изменю $1 to $argv, то изменений нет. Также без изменений, если я изменю$argv to "$argv "

Любая помощь будет принята с благодарностью!

ИЗМЕНИТЬ Если я верну строку на:

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

Затем ошибка исчезла, но она по-прежнему открывает только папку, а не fzf

ИЗМЕНИТЬ 2

Я изменил {q}

так что теперь он гласит:

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

Ошибка исчезла. Но проблема не устранена, это фактически не открывает fzf.

РЕДАКТИРОВАТЬ 3 Я сделал что-то не так с первым набором. Этого не должно быть

set RG_PREFIX rga --files-with-matches 

но

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

более того, все между () после fzf должно оставаться неизменным, поэтому сейчас я здесь:

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

Теперь он, по крайней мере, открывает fzf, но на самом деле он не использует rga для фильтрации каких-либо документов (fzf открывает все доступные файлы в папке), и в окне предварительного просмотра отображается:

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

при этом FILENAME - это что-то вроде Руководства 2-2019.pdf

так что Ммм на один шаг ближе, но фактически не используя, rgaа fzfвместе.

Ответы

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

Вот что в итоге сработало!