VIM logo

Я использую утилиту FZF (а так же плагин fzf.vim) для поиска файла в корневой директории проекта. В качестве команды долгое время использовал ag (The Silver Searcher) – мномопоточная и быстрая утилита, которая формирует список файлов по маске. Увы, результат ее работы не всегда корректен.

Поиск замены привел меня к утилите ripgrep. Эдакий grep на стероидах, который прекрасно заменяет собой ag.

Настройка FZF + ripgrep в качестве замены CtrlP:

nnoremap <C-p> :Files<CR>

if executable('rg')
     let $FZF_DEFAULT_COMMAND = 'rg --files --vimgrep
                 \ --iglob \!*.png
                 \ --iglob \!*.jpg
                 \ --iglob \!*.psd
                 \ --iglob \!*.ico
                 \ --iglob \!*.wav
                 \ --iglob \!*.ogg
                 \ --iglob \!*.mp3
                 \ --iglob \!*.ttf
                 \ --iglob \!*.bin
                 \ --iglob \!*.jar
                 \ --iglob \!*.jks
                 \ --iglob \!*.so'
 endif

Настройка ACK + ripgrep для поиска слова под курсором во всех файлах:

if executable('rg')
     let g:ackprg = 'rg --vimgrep'
endif

map <F4> <Esc>:GrepWordInFiles<CR>:cw<CR>

command! GrepWordInFiles :call s:GrepInFiles()
function! s:GrepInFiles()
   let s:word = expand("")
   let s:cft = &filetype
   if s:cft == "cpp" || s:cft == "c" || s:cft == "objc" || s:cft == "objcpp"
      let s:mask = "-t cpp -t objcpp -t objc"
   else
      let s:mask = ""
   endif

   execute "Ack! " . s:mask . " " . s:word
endfunction
  • Утилита ripgrep – отличная замена ag.
  • Утилита fzf (Fuzzy Finder).
  • Плагин fzf.vim для vim. Заменил собою устаревший, но все еще хорошо работающий CtrlP.
  • Плагин CtrlP для vim.
  • Утилита ag (The Silver Searcher). Увы, результат ее работы зачастую бывает некорректен.