bashを魚の関数に変換する(魚ではrga-fzfを使用)

Dec 06 2020

このbash / zsh関数を魚に変換しようとしています。fzfをripgrep-allと一緒に使用するzsh / bashの関数であるrga-fzfを使用したいと思います。

(私のデフォルトのシェルは魚です)

これが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のようなものになります。

一歩近づいうーんので、実際に使用していないrgafzf一緒に。

回答

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

これが最終的に機能したものです!