4

我正在尝试将此 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 更改为 $argv 则没有任何变化。如果我将 $argv 更改为 "$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 类似于 Guidelines 2-2019.pdf

所以 Mmm 更近了一步,但实际上并没有一起使用rgaand fzf

4

1 回答 1

1
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

这最终奏效了!

于 2020-12-07T18:26:35.830 回答