Я использую утилиту 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