Let’s face it, using the terminal to do even the simplest of tasks can be a pain. For example, let’s say you want to find a file in your project. You can use the
find command to do that. But, it’s not very user-friendly. You have to remember the exact name of the file you’re looking for. If you don’t remember the exact name, you’ll have to use the
find command with the
-name option and then pipe the output to
grep to search for the file. This is a lot of work and can be very time-consuming.
The same issue applies to everything else as soon as we need to find something from a list. Here are a few examples:
- Changing directories
- Finding a command from the history
- Finding a process from the list of running processes
- …and so on
In a nutshell,
fzf is a powerful fuzzy finder that can be used with any list. That means that we can use
fzf to quickly filter through large lists of files, directories, commands, processes, …etc.
fd has some neat features when it comes to searching for files.
Each tool deserves its own blog post. This article is more of a guide to help you get started with
fd and get some ideas on how to speed up your workflow. As a quick into, here’s the official description of
fd from their respective GitHub repositories:
fdis a program to find entries in your filesystem. It is a simple, fast and user-friendly alternative to
find. While it does not aim to support all of find’s powerful functionality, it provides sensible (opinionated) defaults for a majority of use cases.
fzf is a general-purpose command-line fuzzy finder.
It’s an interactive Unix filter for command-line that can be used with any list; files, command history, processes, hostnames, bookmarks, git commits, etc.
If you can’t find installation commands for your OS, please refer to the official documentation for each tool.
# Homebrew is required for easy installation brew install fd brew install fzf # Or, try the following if homebrew doesn't work as expected # git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf # ~/.fzf/install
sudo apt install fd-find sudo apt install fzf
# Chocolatey is required for easy installation choco install fd choco install fzf
apk add fd apk add fzf
As mentioned before
fzf works great when combined with
fd. Let’s start by configuring
fzf to use
fd as the default file finder. To do that, we need to add the following line to our
export FZF_DEFAULT_COMMAND='fd --type f'
You can also add a few arguments to better suit your needs. This is my favorite configuration:
export FZF_DEFAULT_COMMAND='fd --hidden --follow --exclude .git --exclude node_modules'
Let’s break down the arguments:
--hidden- Include hidden files and directories
--follow- Follow symlinks
--exclude .git- Exclude
--exclude node_modules- Exclude
You’re all set! now if you run
fzf in the terminal you’ll see a recursive list of files in your current directory which you can filter through using fuzzy search.
If you enabled keyboard bindings for
fzf during the installation process (which is the default), you can use
Ctrl + R to search through your command history. This is a great way to quickly find a command you used before.
or you can use the following command:
history | fzf
You can use
fzf to quickly find a process from the list of running processes. To do that, run the following command:
ps aux | fzf
Killing a process is as easy as running the following command:
kill -9 **<TAB>
You can use
fzf to quickly find a file in your project. To do that, run the following command:
You can use
fzf to quickly change directories. To do that, run the following command:
You can also use the keyboard shortcut
Alt+C to do the same thing.
You can use
fzf to quickly edit a file in your project. To do that, run the following command:
vim **<TAB> # Or, if you prefer nano nano **<TAB>
We barely scratched the surface of what
fd can do. The official documentation is a great place to learn more about these tools and take them even further. I hope you found this article useful, if you have any questions or suggestions, feel free to leave a comment below.