7 Amazing CLI Tools You Need To Try

Josean Martinez · 2026-05-22 ·▶ Watch on YouTube ·via captions

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

ConceptDefinition
fzfFast, interactive fuzzy finder for files, history, processes, env vars, and more
fdA faster, gitignore-aware replacement for `find`; used as fzf's backend
batA `cat` replacement with syntax highlighting and theming
DeltaA pager for `git diff` with syntax highlighting and side-by-side view
ezaA modern `ls` replacement with icons, colors, Git status, and tree view
tldrCommunity-maintained, concise help pages as an alternative to `man`
thefuckAutocorrects mistyped commands
zoxideA 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

  1. Install all tools via Homebrew: `brew install fzf fd bat git-delta eza tlrc thefuck zoxide`
  2. Add fzf key bindings + completion source line to `.zshrc` after installing fzf
  3. Replace fzf's default `find` backend with `fd` for gitignore-aware, hidden-file-inclusive search
  4. Clone `fzf-git.sh` to enable fuzzy Git hash/branch navigation
  5. Install a custom bat theme (e.g., Tokyo Night) and set `BAT_THEME` in `.zshrc`
  6. Configure Delta in `~/.gitconfig` for readable, syntax-highlighted diffs
  7. Alias `ls` → eza and `cd` → zoxide in `.zshrc` to upgrade commands without changing habits
  8. 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.