In the second post of this series, let’s talk about fzf.
What is fzf?
In its simplest form, fzf
is a fuzzy finder. It lets you search through files, folders, any line-based text using a simple fuzzy and/or regex backed system.
On-demand, fzf
can also be super fancy.
Why do I use it?
Because fzf
is a search tool, you can use it to find files and folders. My most common use-case for it is a simple bash function that goes like this:
# find-and-open, gedit? Sorry I'll just stop.
function fao() {
local ARG;
ARG="${1}";
if [ -z "${ARG}" ]; then
nano "$(fzf)";
else
nano "$(fzf -q"${ARG}")";
fi
}
It starts up a fzf session and then opens up the selected file in nano
.
By default, fzf
is a full-screen tool and takes up the entire height of your terminal. I’ve restricted it to 40% of that, as it looks a bit nicer IMO. You can make more such changes by setting the FZF_DEFAULT_OPTS
environment variable as described in the layout section of the fzf docs.
But that’s not all! You can get real fancy with fzf
.
For example, check out the output of fzf --preview 'bat --style=numbers --color=always --line-range :500 {}'
here (a bit too wide to embed here :()
bat
is acat(1)
clone with syntax highlighting and other nifty features, and also a tool I use on the daily. We’ll probably be covering it soon :)
You can also bind arbitrary keys to actions with relative ease.
The syntax as evident, is pretty simple
<key-shortcut>:execute(<command>)<+abort>
The +abort
there is optional, and signals fzf
that we want to exit after running the command. Detailed instructions are available in the fzf
README.
And that’s it from me. Post any fancy fzf
recipes you come up with in the comments below!
This was part 2 of the Tools of the trade series.