Mengubah fungsi bash menjadi ikan (gunakan rga-fzf pada ikan)

Dec 06 2020

Saya mencoba mengubah fungsi bash / zsh ini menjadi ikan. Saya ingin menggunakan rga-fzf yang merupakan fungsi untuk zsh / bash menggunakan fzf bersama dengan ripgrep-all .

(cangkang default saya adalah ikan)

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

Ini adalah seberapa jauh saya bisa sendiri, dan dengan beberapa bantuan dari posting ini yang membantu - dan posting ini .

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

Namun, sekarang hanya membuka folder (saat ini) dan notifikasi

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

Jika saya mengubah $1 to $argv maka tidak ada perubahan. Juga tidak ada perubahan jika saya berubah$argv to "$argv "

Bantuan apa pun akan sangat dihargai!

EDIT Jika saya mengubah kembali baris ke:

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

Kemudian kesalahan hilang tetapi hanya masih membuka folder dan bukan fzf

EDIT 2

Saya telah mengubah kembali {q}

jadi sekarang terbaca:

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

Kesalahannya hilang. Tapi masalahnya tetap ada, itu tidak benar-benar membuka fzf.

EDIT 3 Saya melakukan sesuatu yang salah dengan set pertama. Ini tidak seharusnya

set RG_PREFIX rga --files-with-matches 

tapi

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

Selain itu, semua yang ada di antara () setelah fzf harus tetap sama jadi saat ini saya di sini:

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

Sekarang setidaknya membuka fzf tetapi tidak benar-benar menggunakan rga untuk memfilter dokumen apa pun (fzf membuka semua file yang tersedia di folder) dan jendela pratinjau menunjukkan:

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

di mana FILENAME adalah sesuatu seperti Pedoman 2-2019.pdf

jadi Mmm selangkah lebih dekat, tetapi tidak benar-benar menggunakan rgadan fzfbersama - sama.

Jawaban

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

Inilah yang pada akhirnya berhasil!