Improve your bash skills in 3 minutes with one trick!
I know. You have your brilliant IDE. That's great, but the fact is that from time to time you need to do something from the command line. There is one useful tool I've discovered some time ago which solves the problem of navigation through files and commands.
The trick - FZF
I won't bore you with the installation guide, the docs describe that well. I only add you should not skip the key bindings
part, it adds FZF to key bindings such as CTRL+R (history search) and CTRL+T (files search).
And that's it - I encourage you to read the documentation. Here is a cheat sheet of things I love the most:
Execute repeatable command
For sure you have some commands you often use, e.g. for authentication to AWS. FZF introduces an addition that displays a list of used commands.
CTRL+R
Find and open the file
Using a similar search, we can find the file and open it in any program.
CTRL+T
You can achieve the same with executable_name $(fzf)
(e.g. cat $(fzf)
) or even fzf --preview 'cat {}'
.
The documentation says you can customize the list of files using additional flags such as --info
or --preview
: fzf --info inline --preview 'cat {}'
.
You can also use files search with any command adding **
and then pressing TAB:
Autocompletions
You wanna kill a process? No problem - use TAB to find the process:
You wanna add your own autocomplete for the executable? Not a problem as well:
Add a proper entry to .fzf.zsh
, here is an example of autocomplete I use with docker-compose:
# Setup fzf
# ---------
if [[ ! "$PATH" == */opt/homebrew/opt/fzf/bin* ]]; then
export PATH="${PATH:+${PATH}:}/opt/homebrew/opt/fzf/bin"
fi
# Auto-completion
# ---------------
_fzf_complete_docker-compose() {
_fzf_complete --multi --reverse --prompt="Select service> " -- "$@" < <(
docker-compose ps -a --services
)
}
[[ $- == *i* ]] && source "/opt/homebrew/opt/fzf/shell/completion.zsh" 2> /dev/null
# Key bindings
# ------------
source "/opt/homebrew/opt/fzf/shell/key-bindings.zsh"
Then refresh your config with source ~/.fzf.zsh
and run any compose command - docker-compose stop **[TAB]
Subscribe to my newsletter
Read articles from Kamil Sopata directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by