Abstract terminal prompt surrounded by glowing modular components representing Zsh plugins

Eight small Zsh plugins, most of them with fewer than 100 GitHub stars, fix specific annoyances at the prompt: deleting the wrong file, retyping commands that already have aliases, slow shell startup, a fragile completion setup and a clipboard that behaves differently on every OS. Six come from a recent Medium post by Technical Savvy; two more were added after checking several maintained candidates against the same everyday criteria.

The key points of these 8 lesser-known Zsh plugins in 20 seconds

  • Six picks come from Technical Savvy; zsh-you-should-use and forgit were added after review.
  • They cover safer deletes, line editing, startup time, completion, clipboard and Git.
  • zsh-safe-rm and zsh-bat have had no commits since November 2024.
  • forgit needs fzf 0.60.0 or later, newer than what Ubuntu 24.04 ships.

Every repository was checked for what its README actually promises, how it installs, what it depends on, its license, its latest commit and its star count (as of November 5, 2026). Seven of the eight were also loaded into zsh 5.9 on an Ubuntu 24.04 container to confirm that the commands shown below exist and behave as described. Keyboard shortcuts and mouse selection cannot be exercised in a headless container, so those parts rely on the documentation alone. For the bigger picture of tmux, editors and other command-line staples, see this look at CLI tools that still matter.

PluginWhat it doesDependencyInstall
zsh-safe-rmrm and del go to the trashshell-safe-rm (submodule)antidote, Oh My Zsh, manual
zsh-you-should-useReminds you of existing aliasesNone (zsh 5.1+)Oh My Zsh, zplug, antigen, AUR
zsh-edit-selectEditor-style selectionTerminal keybindings; bundled helper binariesOh My Zsh, zinit, sheldon, manual
zsh-batHighlighted cat and manbat (batcat on Debian/Ubuntu)Oh My Zsh
clipboardpbcopy, pbpaste and clip everywherexclip, xsel or wl-clipboard on LinuxOh My Zsh, zplug, zcomet, Prezto
forgitInteractive Gitfzf 0.60.0 or laterzinit, Oh My Zsh, Homebrew, AUR
ez-compinitDeferred compinitNoneantidote, manual
zsh-smartcacheCaches startup evalsNoneAny manager or source

Safer, faster editing at the prompt

zsh-safe-rm: a trash can for rm

This is a thin plugin wrapper around shell-safe-rm, Kael Zhang’s script that moves files into the trash instead of unlinking them. Once loaded, it points rm, del and safe-rm at that script and adds unsafe-rm as a shortcut for command rm. The author suggests training yourself to type del, so you don’t get complacent on machines where the plugin isn’t installed. To bypass it, use \rm or command rm.

antidote install mattmc3/zsh-safe-rm
# or by hand (shell-safe-rm is a git submodule, hence --recursive):
git clone --recursive --depth 1 https://github.com/mattmc3/zsh-safe-rm ~/.zplugins/zsh-safe-rm
source ~/.zplugins/zsh-safe-rm/zsh-safe-rm.plugin.zsh

del old-report.log     # lands in ~/.local/share/Trash/files on Linux
\rm scratch.txt        # real deleteCode language: PHP (php)

In testing, both del and the aliased rm moved files into that folder, while \rm removed them for good. A few caveats apply. The last commit dates from November 25, 2024 (31 stars, MIT license), and the submodule is pinned to a February 2018 revision of shell-safe-rm, even though that upstream project is still active. The script relies on a plain mv and never writes the freedesktop .trashinfo files, so a desktop file manager cannot restore items to their original path. If the trash directory is missing, it stops and asks before creating it. And because it works through aliases, it does nothing inside scripts or for sudo rm.

zsh-you-should-use: a nudge toward your own aliases

Plenty of admins collect dozens of aliases and keep typing the long form anyway. This plugin prints a reminder whenever a command matches an alias you already have, including global aliases and Git aliases. It needs no setup. The hint appears before the command runs, or afterwards with YSU_MESSAGE_POSITION="after", and setting YSU_HARDCORE=1 makes the shell refuse the long form outright.

git clone https://github.com/MichaelAquilina/zsh-you-should-use.git \
  ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/you-should-use
# .zshrc: plugins=(... you-should-use)

alias ll='ls -l'
ls -l /var/log
# Found existing alias for "ls -l". You should use: "ll"Code language: PHP (php)

That exact message showed up in an interactive zsh session during testing. The project has 1,939 stars, a GPL-3.0 license and a last commit on May 26, 2026. It officially supports zsh 5.1 and later, and it is also packaged for zplug, antigen, zgen and the Arch User Repository (AUR).

zsh-edit-select: text-editor selection on the command line

Shift plus the arrow keys selects text, Ctrl+A selects everything, Ctrl+C, Ctrl+X and Ctrl+V copy, cut and paste, Ctrl+Z and Ctrl+Shift+Z undo and redo, and typing over a selection replaces it. It also picks up text selected with the mouse. macOS users get Cmd instead of Ctrl, and Linux (X11 and Wayland) and WSL are supported too.

git clone --depth=1 https://github.com/Michael-Matta1/zsh-edit-select.git \
  ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-edit-select
# or with zinit:
zinit ice depth"1"; zinit light Michael-Matta1/zsh-edit-select

edit-select config   # wizard for mouse behavior and keybindingsCode language: PHP (php)

None of this works until the terminal emulator passes those key combinations through, and many terminals reserve them for tabs or their own clipboard. The README ships configuration snippets for Kitty, Alacritty, WezTerm, Foot, Konsole, Ghostty, iTerm2, VS Code and Windows Terminal, and lets you pick between copying with Ctrl+Shift+C (leaving Ctrl+C as interrupt) or the reverse. There is also a guided installer launched with bash <(curl …) that edits terminal configs after backing them up, although the author recommends the manual route for heavily customized setups. Worth knowing before rollout: on first load the plugin downloads its own prebuilt clipboard helpers from GitHub Releases, verified with SHA-256. That is why it was the one plugin not loaded in testing. On GNOME, Cinnamon and Pantheon under Wayland it needs XWayland. Stats: 38 stars, MIT license, last commit on October 26, 2026.

Readable output, a portable clipboard and interactive Git

zsh-bat: syntax-highlighted cat and man pages

The plugin aliases cat to bat, which adds syntax highlighting and line numbers, keeps the original binary reachable as rcat, and sets MANPAGER so man pages are colorized. On Debian and Ubuntu the bat binary is called batcat, and the plugin detects that on its own. Without bat installed it does nothing.

sudo apt install bat
git clone https://github.com/fdellwing/zsh-bat.git $ZSH_CUSTOM/plugins/zsh-bat
# .zshrc: plugins=(... zsh-bat)

cat /etc/nginx/nginx.conf   # bat with highlighting
rcat /etc/hostname          # plain old cat
man rsync                   # colorized man pageCode language: PHP (php)

In the container, cat resolved to /usr/bin/batcat and rcat to /usr/bin/cat. When output was not going to a terminal, bat printed plain text, so pipelines keep working. The repository has 75 stars and an MIT license, but its last commit is from November 12, 2024. It is tiny (two aliases and two environment variables), though the MANPAGER change applies to the whole session.

clipboard: pbcopy and pbpaste beyond the Mac

Anyone who moves between macOS and Linux misses pbcopy and pbpaste. This plugin defines both as functions on macOS, X11, Wayland, WSL 1 and 2, Cygwin and MSYS2, plus clip, which copies when it receives piped input and prints the clipboard otherwise. On Linux it shells out to xclip, xsel or wl-copy, so one of them must be installed; on WSL it uses clip.exe.

cd ~/.oh-my-zsh/custom/plugins && git clone https://github.com/zpm-zsh/clipboard.git
# .zshrc: plugins=(... clipboard)

ip -br addr | pbcopy
pbpaste | grep -c UP
echo "some text" | clip   # copy
clip                      # print clipboardCode language: PHP (php)

With a virtual X server (Xvfb) and xclip, pbcopy and pbpaste round-tripped text correctly in testing. The plugin also defines an open function, which may collide with an alias or command of the same name. On a headless remote server there is simply no clipboard to reach. GPL-3.0, 49 stars, last commit on September 11, 2026, which added wl-clipboard as a dependency for Wayland sessions.

forgit: fuzzy, interactive Git

With 5,093 stars (MIT, last commit on October 24, 2026), this is the best known of the eight, yet it rarely makes the usual must-have lists. It turns Git chores into fzf pickers: ga to choose what to stage, glo to browse the log with previews, gd for diffs, gcb to switch branches and gi to build a .gitignore, among roughly thirty commands.

zinit load wfxr/forgit
# or: git clone https://github.com/wfxr/forgit.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/forgit
# or: brew install forgit

ga     # interactive git add
glo    # interactive git logCode language: PHP (php)

It requires fzf 0.60.0 or later. Ubuntu 24.04’s apt package is 0.44.1, and in testing forgit refused to run with fzf version 0.60.0 or higher is required, so install fzf from upstream first. Its two- and three-letter aliases can clash with those of the Oh My Zsh git plugin; rename them by setting variables such as forgit_add before loading, or turn them all off with FORGIT_NO_ALIASES.

Startup speed and a sane completion system

ez-compinit: compinit at the right moment

Zsh’s completion system starts with compinit, which expects fpath to be fully populated. Many plugins, though, call compdef early, and that function only exists after compinit runs. ez-compinit wraps both, queues any compdef calls and fires the real compinit at the very end of .zshrc. It also bundles completion styles borrowed from Oh My Zsh, Prezto and grml.

# first line of ~/.zsh_plugins.txt (antidote):
mattmc3/ez-compinit

# .zshrc:
zstyle ':plugin:ez-compinit' 'compstyle' 'zshzoo'
compstyle -l   # gremlin ohmy prez zshzooCode language: PHP (php)

Load it near the top, before anything that calls compdef. In testing, a compdef issued before the completion system existed was registered by the time the prompt appeared, and the dump file landed in ~/.cache/zsh/zcompdump. The author notes that regular Oh My Zsh users do not need it, because the framework already calls compinit. 55 stars, MIT license, last commit on January 11, 2026.

zsh-smartcache: fewer evals on every launch

Version managers and environment tools such as rbenv, pyenv or direnv ask you to add eval "$(… init -)" to .zshrc, and each one spawns a process every time a shell opens. zsh-smartcache stores that output on disk, compiles it with zcompile and regenerates it in the background on each launch; if anything changed, it updates the cache and tells you the change will apply next session. It can cache completion scripts too.

# before
eval "$(rbenv init -)"
# after
smartcache eval rbenv init -

# completions
smartcache comp rustup completions zshCode language: PHP (php)

The author’s own benchmark, run with hyperfine 'zsh -ic exit' on a Ryzen 3700X, shows rbenv init 1.2.0 dropping from about 48 ms to about 23.5 ms. That number was not reproduced here. What was confirmed is that smartcache eval writes a cache file plus its compiled copy under ~/.cache/zsh-smartcache, and that the exported variable is present on both the first and the cached launch. The README gives no install steps, but any plugin manager or a plain source works. 59 stars, MIT license, last commit on March 20, 2026.

Load order without slowing the shell down

Order matters more than the choice of manager. ez-compinit goes first; zsh-smartcache must load before any line that calls it; and alias-defining plugins (zsh-safe-rm, zsh-bat, forgit) should come after any framework that uses the same names, because in Zsh the last alias defined wins. With antidote, a single text file does the job:

# ~/.zsh_plugins.txt
mattmc3/ez-compinit
QuarticCat/zsh-smartcache
MichaelAquilina/zsh-you-should-use
Michael-Matta1/zsh-edit-select
fdellwing/zsh-bat
zpm-zsh/clipboard
wfxr/forgit
mattmc3/zsh-safe-rm

# measure before and after every change
hyperfine 'zsh -ic exit'Code language: PHP (php)

zinit users can do the same with one zinit light owner/repo line per plugin, in the same order. Add plugins one at a time and time the startup after each step, an approach also covered in this guide to building a modern terminal setup.

Frequently asked questions

Do these plugins work with Oh My Zsh?

Yes. Most document an install that clones the repository into $ZSH_CUSTOM/plugins and adds it to plugins=(...). ez-compinit is the practical exception: its author says regular Oh My Zsh users don’t need it.

Is zsh-safe-rm a replacement for backups?

No. It moves files into a trash folder through aliases, which do not apply inside scripts or to sudo rm, and \rm or command rm skip it entirely.

Why won’t forgit run on Ubuntu 24.04?

It requires fzf 0.60.0 or later, and Ubuntu 24.04 ships fzf 0.44.1. Installing fzf from the upstream project fixes it.

How can I tell whether a plugin slows down shell startup?

Run hyperfine 'zsh -ic exit', the method the zsh-smartcache author uses, or time zsh -i -c exit, before and after adding each plugin.

Sources:

Scroll to Top