Vim search like a boss

ctrlp.vim war ein treuer Begleiter, doch heute musste es weichen; fzf ist - sofern richtig konfiguriert - einfach schneller. Nicht, dass sich fzf bereits als command-line fuzzy finder durchgesetzt hat, es lässt sich auch sehr einfach in vim integrieren.

Im Hintergrund verwendet fzf einfach nur find. Der kleine Trick liegt nun darin dies gegen ag zu tauschen, welches um einiges schneller ist.

ag (The Silver Searcher) sollte im Paketmanager eurer Wahl zu finden sein. Die Installation von fzf in diesem Fall über Vundle:

Plugin 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }

Zufälligerweise ist gerade eine geeignete Tastenkombination frei geworden. ctrl + p.

nnoremap <C-p> :FZF<CR>

fzf hört unter anderem auf die Umgebungsvariablen FZF_DEFAULT_COMMAND und FZF_CTRL_T_COMMAND. Diese können wie folgt gesetzt werden:

1
2
3
4
5
export FZF_DEFAULT_COMMAND='ag --hidden --ignore .git -f -g ""'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"

# Es bietet sich an weitere Pfade zu ignorieren. 
# --ignore .cache --ignore .ccache --ignore .VirtualBox --ignore Steam

--hidden sorgt für die Beachtung von dotfiles. -f folgt Symlinks.
So weit, so gut!
Kommen wir nun zum besten Teil. ack.vim befähigt uns einer rekursiven dateiübergreifenden musterbasierten Suche. Auch hier verwenden wir den Silver Searcher.

1
2
3
4
5
6
7
" Beides ist der .vimrc hinzuzufügen.

Plugin 'mileszs/ack.vim'

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

Öffnet vim in einem Projektordner eurer Wahl und probiert es aus.

:Ack! {pattern}

Es lohnt ein Blick in die README.md; Insbesondere auf die Keyboard Shortcuts.