7 Amazing CLI Tools You Need To Try

Josean Martinez · 2026-05-22 ·▶ Watch on YouTube ·via captions ·3 min read
TL;DR

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

fzf
tap to reveal ↩
Fast, interactive fuzzy finder for files, history, processes, env vars, and more
fd
tap to reveal ↩
A faster, gitignore-aware replacement for find; used as fzf's backend
bat
tap to reveal ↩
A cat replacement with syntax highlighting and theming
Delta
tap to reveal ↩
A pager for git diff with syntax highlighting and side-by-side view
eza
tap to reveal ↩
A modern ls replacement with icons, colors, Git status, and tree view
tldr
tap to reveal ↩
Community-maintained, concise help pages as an alternative to man
thefuck
tap to reveal ↩
Autocorrects mistyped commands
zoxide
tap to reveal ↩
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

  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.