%EF%BC%9F.png)
當我運行專案範圍(多文件)搜尋時弗茲弗,結果充斥著以下行文件路徑與查詢匹配,擠出文件中更相關的結果內容匹配。
例如,運行來自 wiki 的 Ag 範例,
ag --nobreak --nonumbers --noheading . | fzf
我會查詢search
並得到這樣的東西,
plugin/keybindings.vim:cnoremap <expr> <C-Y> refract#if_incsearch("\<C-L>", "\<C-Y>")
plugin/keybindings.vim:cmap <C-P> <Plug>(refract_incsearch_prev)
plugin/coherent.vim:set incsearch
plugin/coherent.vim:setg tags+=./tags;~ " search for tags recursively upwards until ~
plugin/search.vim:" use it for tab-completion instead depending on context of cmdline
plugin/search.vim: autocmd User Hint,listical_next,listical_prev Latitude
plugin/search.vim: autocmd User Grepper call hint#prepare_highlights()
plugin/search.vim:let g:fzf_colors =
plugin/search.vim:" let g:grepper =
plugin/search.vim:\ <q-args>,
plugin/search.vim:\ <bang>0)
plugin/search.vim:augroup END
plugin/search.vim: autocmd!
plugin/search.vim:
plugin/search.vim:
plugin/search.vim:
plugin/search.vim:
> plugin/search.vim:
41/517
> search
我究竟做錯了什麼?當我在沒有 FZF 的情況下執行類似的 Ag 查詢時,我只得到文件內容中發生查詢的結果(這就是我想要的)。
答案1
我誤解了 ag 和 fzf 之間的交互,認為我輸入的查詢在管道到 fzf 之前以某種方式通過了 ag。回想起來,這是一個愚蠢的錯誤,因為過濾正是 fzf 所做的,而 ag 只是用作生成大量有意義的行的一種方式。
為了從中獲得我想要的東西,我查看了 ag 生成的行的格式,例如
plugin/coherent.vim:set incsearch
告訴 fzf 將其:
視為欄位分隔符,並且應將搜尋範圍限制為欄位 2、3、4...
ag --nobreak --nonumbers --noheading . | fzf --delimiter=: --nth=2..
如果任何已處理的檔案的:
檔案名稱中包含 a ,這將會中斷,但我預計這種情況不會經常發生。
答案2
對於任何正在尋找 ripgrep 腳本的人,這就是我想出的:
FZF_EDITOR="gvim"
# Fuzzy Ripgrep Ignoring-case
frgi() {
local result
IFS=$'\n' result="$(rg -i --line-number "$@" | fzf --no-sort --tac --delimiter=: --nth=2..)"
local filename
local lineno
local _
if [[ -n "$result" ]]
then
IFS=':' read -r filename lineno _ <<< "$result"
# Vim can accept line-number with +99
# But if your editor cannot, then you had better remove the + argument
verbosely "$FZF_EDITOR" +"$lineno" "$filename"
fi
}