我正在尝试将此 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 更近了一步,但实际上并没有一起使用rga
and fzf
。