%3F.png)
Wenn ich eine projektweite (mehrere Dateien) Suche durchführe durchFZFsind die Ergebnisse überflutet mit Zeilen, derenDateipfadentspricht der Abfrage und verdrängt die relevanteren Ergebnisse, bei denen die DateiInhaltabgestimmt.
Beispielsweise führt man denAg-Beispiel aus dem Wiki,
ag --nobreak --nonumbers --noheading . | fzf
Ich werde danach fragen search
und etwas wie das hier bekommen,
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
Was mache ich falsch? Wenn ich eine ähnliche Ag-Abfrage ohne FZF ausführe, erhalte ich nur die Ergebnisse, bei denen meine Abfrage im Dateiinhalt vorkommt (was ich will).
Antwort1
Ich habe die Interaktion zwischen ag und fzf falsch verstanden und dachte, die Abfrage, die ich eingegeben habe, würde irgendwie durch ag geleitet, bevor sie an fzf weitergeleitet wird. Im Nachhinein war das ein dummer Fehler, da fzf genau das Filtern macht und ag einfach dazu verwendet wird, um Unmengen sinnvoller Zeilen zu generieren.
Um das zu erreichen, was ich wollte, habe ich mir das Format der von ag generierten Zeilen angesehen, z. B.
plugin/coherent.vim:set incsearch
Weisen Sie fzf an, es als Feldtrennzeichen zu behandeln :
und den Suchumfang auf die Felder 2, 3, 4 usw. zu beschränken.
ag --nobreak --nonumbers --noheading . | fzf --delimiter=: --nth=2..
Dies schlägt fehl, wenn eine der verarbeiteten Dateien ein :
im Dateinamen enthält, aber ich gehe nicht davon aus, dass dies allzu oft vorkommt.
Antwort2
Für alle, die nach einem Ripgrep-Skript suchen, hier ist mein Ergebnis:
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
}