7 Amazing CLI Tools You Need To Try
A walkthrough of seven CLI tools that meaningfully improve the terminal experience on macOS/Linux. The tools cover fuzzy finding, file previews, better diffs, directory navigation, and command autocorrection — with configuration tips to integrate them together. ---
Key Concepts
| Concept | Definition |
|---|---|
| fzf | Fast, interactive fuzzy finder for files, history, processes, env vars, and more |
| fd | A faster, gitignore-aware replacement for `find`; used as fzf's backend |
| bat | A `cat` replacement with syntax highlighting and theming |
| Delta | A pager for `git diff` with syntax highlighting and side-by-side view |
| eza | A modern `ls` replacement with icons, colors, Git status, and tree view |
| tldr | Community-maintained, concise help pages as an alternative to `man` |
| thefuck | Autocorrects mistyped commands |
| zoxide | A smarter `cd` that learns frequently visited directories |
Notes
fzf (Fuzzy Finder)
- Install: `brew install fzf`
- Add key bindings and fuzzy completion to `.zshrc`
- **Core use cases:**
- Run `fzf` alone to search files interactively
- `nvim` + `Ctrl-T` → fuzzy-search files/dirs to open
- `cd **<Tab>` → opens fzf filtered to directories only
- `kill -9 **<Tab>` → fuzzy-search running processes
- `unset **<Tab>` / `export **<Tab>` → browse environment variables
- `unalias **<Tab>` → browse aliases
- `Ctrl-R` → fuzzy search command history
- Navigation within fzf: `Ctrl-J/K`, `Ctrl-N/P`, or arrow keys
- `Tab` to multi-select, `Shift-Tab` to deselect
- Install: `brew install fd`
- Set `FZF_DEFAULT_COMMAND` in `.zshrc` to use `fd`
- Show hidden files, strip CWD prefix, exclude `.git` dirs
- fd respects `.gitignore` automatically — avoids noise in results
- Define separate fd commands for `Ctrl-T` (files + dirs) and `**<Tab>` (dirs only)
- Clone the `fzf-git` repo to home directory
- Key bindings (hold `Ctrl`, then press):
- `GH` → browse Git hashes (use with `git diff`, etc.)
- `GB` → browse branches (use with `git checkout`)
bat (Better cat)
- Install: `brew install bat`
- Usage: `bat <file>` — outputs file with syntax highlighting
- **Themes:**
- List themes interactively: `bat --list-themes | fzf --preview="bat --theme={} <file>"`
- Install custom theme: place `.tmTheme` file in `$(bat --config-dir)/themes/`
- Rebuild cache after adding theme: `bat cache --build`
- Set default theme in `.zshrc`: `export BAT_THEME="tokyonight_night"`
- Tokyo Night theme installed via `curl` from GitHub
Delta (Better git diff)
- Install: `brew install git-delta`
- Configure in `~/.gitconfig`:
- Set `delta` as the pager under `[core]`
- Uses the current bat theme for syntax coloring
- Enable side-by-side view: add `side-by-side = true` under `[delta]`
eza (Better ls)
- Install: `brew install eza`
- Useful flags:
- `--color=always` — force color output
- `--long` — detailed listing
- `--git` — show Git status per file
- `--no-filesize`, `--no-time`, `--no-user`, `--no-permissions` — reduce clutter
- `--icons` — show file icons
- `--tree --level=2` — tree view with depth limit
- Alias `ls` to preferred eza command in `.zshrc` to keep muscle memory
fzf Previews (bat + eza integration)
- Add to `.zshrc` before fzf setup:
- `Ctrl-T` preview: uses `bat` (limit to 500 lines)
- `**<Tab>` preview for `cd`: uses `eza --tree`
- `**<Tab>` preview for `export`/`unset`: shows variable value
- Default fallback: `bat` preview
- Implement via `_fzf_comprun` function with a `case` statement on the command
tldr
- Install: `brew install tlrc` (Rust client)
- Usage: `tldr <tool>` — shows concise, community-written usage examples
- Complement to `man` pages, not a replacement — use `man` when full detail is needed
thefuck (Command Autocorrect)
- Install: `brew install thefuck`
- Enable in `.zshrc`: add `eval $(thefuck --alias)`
- Can also set a custom alias (e.g., `fk`)
- After a failed command, type `fuck` (or alias) + `Enter` to autocorrect and rerun
- If multiple corrections exist, use arrow keys to choose
zoxide (Smarter cd)
- Install: `brew install zoxide`
- Add init line to `.zshrc`: `eval "$(zoxide init zsh)"`
- Usage: `z <partial-name>` navigates to the best-matching previously visited directory
- `z <string> <Space><Tab>` → opens fzf to pick from multiple matches
- Alias `cd` to `z` in `.zshrc` to use transparently
- Standard `cd` flags (e.g., `cd ..`) still work
fzf Theme Customization
- Define custom colors in `.zshrc` via `FZF_DEFAULT_OPTS`
- fzf theme generator available online (link in video description)
Actionable Takeaways
- Install all tools via Homebrew: `brew install fzf fd bat git-delta eza tlrc thefuck zoxide`
- Add fzf key bindings + completion source line to `.zshrc` after installing fzf
- Replace fzf's default `find` backend with `fd` for gitignore-aware, hidden-file-inclusive search
- Clone `fzf-git.sh` to enable fuzzy Git hash/branch navigation
- Install a custom bat theme (e.g., Tokyo Night) and set `BAT_THEME` in `.zshrc`
- Configure Delta in `~/.gitconfig` for readable, syntax-highlighted diffs
- Alias `ls` → eza and `cd` → zoxide in `.zshrc` to upgrade commands without changing habits
- Implement `_fzf_comprun` in `.zshrc` to get context-aware previews using bat and eza
Quotes Worth Keeping
fd by default will ignore any files and directories that are ignored with a .gitignore file, which is really nice because we typically want to ignore these files when we're searching for things.
With zoxide you can use `z` instead of `cd` to move into a directory — it'll remember the directories you've visited and make it a lot easier to go back to them in the future.