Como pesquisar o arquivo * contents * (grep / ag / rg) usando o FZF?

1

Quando executo uma pesquisa em todo o projeto (vários arquivos) por meio de FZF , os resultados são inundados com linhas cujo caminho de arquivo corresponde à consulta, eliminando os resultados mais relevantes em que o conteúdo do arquivo é correspondido.

Por exemplo, executando o exemplo Ag do wiki ,

ag --nobreak --nonumbers --noheading . | fzf

Vou consultar search e obter algo assim,

  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

O que estou fazendo de errado? Quando executo uma consulta Ag similar sem o FZF, só obtenho os resultados em que minha consulta ocorreu no conteúdo do arquivo (que é o que eu quero).

    
por ivan 16.04.2018 / 06:33

1 resposta

1

Eu estava entendendo mal a interação entre ag e fzf, achando que a consulta que eu digitei foi de alguma forma passada por ag antes de pipilar para fzf. Em retrospecto, esse foi um erro tolo de se fazer, já que a filtragem é exatamente o que o fzf faz, e o ag está sendo usado simplesmente como uma maneira de gerar toneladas de linhas significativas.

Para obter o que eu queria, analisei o formato das linhas geradas, por exemplo

plugin/coherent.vim:set incsearch

Diga ao fzf para tratar : como o delimitador de campo e que ele deve restringir o escopo de sua pesquisa aos campos 2, 3, 4, ...

ag --nobreak --nonumbers --noheading . | fzf --delimiter=: --nth=2..

Isso será interrompido se algum arquivo processado contiver um : no nome do arquivo, mas isso é algo que não espero que aconteça com muita frequência.

    
por 16.04.2018 / 14:27

Tags