How to integrate fzf for fuzzy finding
vifm already has powerful search features such as
:locate. However, it is possible to further expand its capabilities with fun and powerful programs such as
fzf "a general-purpose command-line fuzzy finder."
You need to have fzf installed. This method creates pipelines using the
locate commands which are present in most Linux distributions.
fzf is a powerful and quick interactive filter in addition to working as a file searching utility by default. This method focuses on piping the output from
locate $HOME for quick traversal though the user's
$HOME directory and the output from
find for recursive traversal.
We can add the following two commands to
command! FZFlocate :set noquickview | :execute 'goto "'.system('locate $HOME | fzf --height 10 2>/dev/tty ').'"%IU' | redraw command! FZFfind :set noquickview | :execute 'goto "'.system('find | fzf --height 10 2>/dev/tty ').'"%IU' | redraw
In both examples
fzf will pop up on the bottom and allow us to filter the output of the feeder command. To prevent artifacts,
vifm's previews are switched off. Once our selection is made,
fzf will close and
vifm will advance the active pane to the directory of the selected file with the cursor highlighting it.
vifm will run its built in
:goto however other commands like
:cd should work if an appropriate list is piped to
fzf. As this is an example of process substitution (using the output of a command or commands as an argument for another command), we need to use the
system() function to run our searching/listing
fzf pipeline. To prevent visual artifacts in the terminal, we use the command macro
%IU and a call to
:redraw for extra safety.
We can then add the following mappings to run these commands from normal mode:
nnoremap <c-g> :FZFlocate<cr> nnoremap <c-f> :FZFfind<cr>
In this example I have chosen CTRL-g and CTRL-f.
Here are some further links to discussion of
fzf and the