> ## Content Index
> Fetch the complete content index at: https://catalins.tech/llms.txt
> Use this file to discover other available public pages before exploring further.

# The Only 6 Zsh Plugins You Need
- URL: https://catalins.tech/zsh-plugins/
- Published: 2023-11-04T17:55:39.000Z
- Updated: 2026-02-24T16:21:30.000Z
- Author: Catalin Pit
- Tags: Zsh, Mac, Terminal, Developer Resources

Zsh plugins allow you to customize and improve your Zsh shell experience. They either enhance the appearance of your shell or the functionality. However, if you search for "Zsh plugins" on the internet, you'll encounter a sea of Zsh plugins.

How do you know what plugins to install? In this article, I'll show you the only 6 Zsh plugins you need to become faster with the CLI.

By the way, I'm using these plugins with the oh-my-zsh framework. If you want to take your Mac terminal to the next level, check out [iTerm2 + Oh-My-Zsh: Supercharge Your Mac Terminal](https://catalins.tech/improve-mac-terminal/).

💡

If you want to install all of these automatically on a new machine, including a Brewfile that handles the whole process, check out [how I set up new MacBooks](https://catalins.tech/how-i-setup-new-macbooks/).

## 1\. Git Plugin

The first plugin is `git`, which comes pre-installed with [oh-my-zsh](https://catalins.tech/improve-mac-terminal/). It provides useful aliases (or shortcuts) and a couple of useful functions.

Instead of typing long commands such as `git push --set-upstream origin <branch>`, for example, you can use the alias (shortcut) `gpsup`.

Typing one long command occasionally isn't a hassle. However, we interact with Git frequently as developers, and we spend a lot of time typing commands. That adds up in the long run, so why not save a few keystrokes?

The Git aliases I use most frequently are as follows:

- `ga` and `gaa` \- the aliases for `git add` & `git add --all`
- `gco`and `gcb` \- the aliases for `git checkout` & `git checkout -b`
- `gcmsg` \- the alias for `git commit --message`
- `gd` \- the alias for `git diff`
- `gl` \- the alias for `git pull`
- `gp` \- the alias for `git push`
- `gpsup` \- the alias for `git push --set-upstream origin $(git_current_branch)`
- `gst` \- the alias for `git status`

However, you can see all the available Git aliases/shortcuts at the end of the article.

In case you want to create [custom Zsh aliases](https://catalins.tech/zsh-aliases/), you can do so by adding them in the `.zshrc` configuration file. Check out my [.zshrc configuration file](https://catalins.tech/zshrc-configuration-file/) if you want to see my custom aliases.

## 2\. [Zsh-autosuggestions Plugin](https://github.com/zsh-users/zsh-autosuggestions)

You most likely write a considerable amount of commands in the terminal, and the chances are that you repeat most of them frequently.

The `zsh-autosuggestions` plugin provides an autocomplete functionality. It suggests commands based on your history of previous commands and completions. Completion means that it offers suggestions based on what the tab completion would suggest.

![zsh-autosuggestions zsh plugin](https://catalins.tech/content/images/2023/11/zsh-autosuggestions.png)

The image illustrates an example suggestion. It's a handy plugin that helps you save keystrokes and, therefore, time.

There are a couple of ways to install it, but if you have `oh-my-zsh` installed, you can do it as follows:

- Clone the plugin repository in the `plugins` folder of Zsh:

```
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

```

- Add the plugin in the `.zshrc` file:

```
plugins=(git zsh-autosuggestions)

```

- Save the file and restart Zsh as follows:

```
source ~/.zshrc

```

You can check out the other installation processes in the [plugin repository](https://github.com/zsh-users/zsh-autosuggestions/blob/master/INSTALL.md).

## 3\. [Zsh-syntax-highlighting Plugin](https://github.com/zsh-users/zsh-syntax-highlighting)

This plugin provides syntax highlighting for the commands you type in the terminal.

Without this plugin, the whole command is the same color - white. Not only does it look dull, but it's also more difficult to catch typos and other mistakes.

![zsh-syntax-highlighting-plugin](https://catalins.tech/content/images/2023/11/zsh-syntax-highlighting-plugin.png)

With the syntax highlighting, the terminal looks better, and you can seamlessly differentiate between the different parts of the command. Looking at the above picture, we can agree that it looks much better.

There are a couple of ways to install it, but if you have `oh-my-zsh` installed, you can do it as follows:

- Clone the plugin repository in the `plugins` folder of Zsh:

```
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

```

- Add the plugin in the `.zshrc` file:

```
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

```

- Save the file and restart Zsh as follows:

```
source ~/.zshrc

```

You can check out the other installation processes in the [plugin repository](https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/INSTALL.md).

## 4\. [You-should-use Plugin](https://github.com/MichaelAquilina/zsh-you-should-use)

It's difficult to remember all the aliases/shortcuts from the Git plugin or the ones you set manually in `.zshrc`. That's where the `you-should-use` plugin comes in handy.

Whenever you use a command that has an alias, it will find the shortcut and display it in the terminal. It's handy, and it helps you memorize the shortcuts.

![you-should-use zsh plugin](https://catalins.tech/content/images/2023/11/you-should-use.jpg)

There are a couple of ways to install it, but if you have `oh-my-zsh` installed, you can do it as follows:

- Clone the plugin repository in the `plugins` folder of Zsh:

```
git clone https://github.com/MichaelAquilina/zsh-you-should-use.git $ZSH_CUSTOM/plugins/you-should-use

```

- Add the plugin in the `.zshrc` file:

```
plugins=(git zsh-autosuggestions zsh-syntax-highlighting you-should-use)

```

- Save the file and restart Zsh as follows:

```
source ~/.zshrc

```

You can check out the other installation processes in the [plugin repository](https://github.com/MichaelAquilina/zsh-you-should-use#installation).

## 5\. [Zsh-bat Plugin](https://github.com/fdellwing/zsh-bat)

If you use the `cat` command regularly, you'll love this plugin. The output from the `cat` command is pretty bleak, and it can be challenging to navigate it.

> *By the way, here are the [Mac commands I use the most frequently](https://catalins.tech/mac-terminal-commands/).*

So, the `zsh-bat` plugin replaces the `cat` command and gives you a better output. Instead of using the `cat` command, you'll use `bat`, which returns an output with syntax highlighting and Git integration.

![zsh-bat plugin](https://catalins.tech/content/images/2023/11/zsh-bat-plugin.jpeg)

Now the output is legible, and it also looks fantastic! You can install it in the usual way:

- Clone the plugin repository in the `plugins` folder of Zsh:

```
git clone https://github.com/fdellwing/zsh-bat.git $ZSH_CUSTOM/plugins/zsh-bat

```

- Add the plugin in the `.zshrc` file:

```
plugins=(git zsh-autosuggestions zsh-syntax-highlighting you-should-use zsh-bat)

```

- Save the file and restart Zsh as follows:

```
source ~/.zshrc

```

Important mention: For this plugin to work, you must install [bat](https://github.com/sharkdp/bat) on your machine.

## 6\. Node Version Manager (NVM)

The `nvm` plugin allows you to easily switch between Node versions. See [how to use nvm with oh-my-zsh](https://catalins.tech/node-version-manager-oh-my-zsh/).

💡

Learn how to switch to a pre-configured [Neovim setup](https://catalins.tech/lazyvim/) that works like a full IDE, entirely from the terminal.

## Summary

These are the 6 plugins that make my life easier and make me more productive. They improve both the appearance and the functionality of your Zsh shell.

Keep the article handy because I'll occasionally update it to include new plugins I find.

My entire Zsh/oh-my-zsh configuration (.zshrc file) is available [here](https://catalins.tech/zshrc-configuration-file/).

#### Zsh Git Aliases (Shortcuts)

| Alias                | Command                                                                                                                         |                          |                     |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ------------------- |
| grt                  | cd "$(git rev-parse --show-toplevel \|| echo .)"                                                                                |                          |                     |
| ggpnp                | ggl && ggp                                                                                                                      |                          |                     |
| ggpur                | ggu                                                                                                                             |                          |                     |
| g                    | git                                                                                                                             |                          |                     |
| ga                   | git add                                                                                                                         |                          |                     |
| gaa                  | git add --all                                                                                                                   |                          |                     |
| gapa                 | git add --patch                                                                                                                 |                          |                     |
| gau                  | git add --update                                                                                                                |                          |                     |
| gav                  | git add --verbose                                                                                                               |                          |                     |
| gwip                 | git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign --message "--wip-- \[skip ci\]" |                          |                     |
| gam                  | git am                                                                                                                          |                          |                     |
| gama                 | git am --abort                                                                                                                  |                          |                     |
| gamc                 | git am --continue                                                                                                               |                          |                     |
| gamscp               | git am --show-current-patch                                                                                                     |                          |                     |
| gams                 | git am --skip                                                                                                                   |                          |                     |
| gap                  | git apply                                                                                                                       |                          |                     |
| gapt                 | git apply --3way                                                                                                                |                          |                     |
| gbs                  | git bisect                                                                                                                      |                          |                     |
| gbsb                 | git bisect bad                                                                                                                  |                          |                     |
| gbsg                 | git bisect good                                                                                                                 |                          |                     |
| gbsn                 | git bisect new                                                                                                                  |                          |                     |
| gbso                 | git bisect old                                                                                                                  |                          |                     |
| gbsr                 | git bisect reset                                                                                                                |                          |                     |
| gbss                 | git bisect start                                                                                                                |                          |                     |
| gbl                  | git blame -w                                                                                                                    |                          |                     |
| gb                   | git branch                                                                                                                      |                          |                     |
| gba                  | git branch --all                                                                                                                |                          |                     |
| gbd                  | git branch --delete                                                                                                             |                          |                     |
| gbD                  | git branch --delete --force                                                                                                     |                          |                     |
| gbgd                 | LANG=C git branch --no-color -vv \| grep ": gone\\\]"                                                                           | awk '"'"'{print $1}'"'"' | xargs git branch -d |
| gbgD                 | LANG=C git branch --no-color -vv \| grep ": gone\\\]"                                                                           | awk '"'"'{print $1}'"'"' | xargs git branch -D |
| gbm                  | git branch --move                                                                                                               |                          |                     |
| gbnm                 | git branch --no-merged                                                                                                          |                          |                     |
| gbr                  | git branch --remote                                                                                                             |                          |                     |
| ggsup                | git branch --set-upstream-to=origin/$(git\_current\_branch)                                                                     |                          |                     |
| gbg                  | LANG=C git branch -vv \| grep ": gone\\\]"                                                                                      |                          |                     |
| gco                  | git checkout                                                                                                                    |                          |                     |
| gcor                 | git checkout --recurse-submodules                                                                                               |                          |                     |
| gcb                  | git checkout -b                                                                                                                 |                          |                     |
| gcd                  | git checkout $(git\_develop\_branch)                                                                                            |                          |                     |
| gcm                  | git checkout $(git\_main\_branch)                                                                                               |                          |                     |
| gcp                  | git cherry-pick                                                                                                                 |                          |                     |
| gcpa                 | git cherry-pick --abort                                                                                                         |                          |                     |
| gcpc                 | git cherry-pick --continue                                                                                                      |                          |                     |
| gclean               | git clean --interactive -d                                                                                                      |                          |                     |
| gcl                  | git clone --recurse-submodules                                                                                                  |                          |                     |
| gccd                 | git clone --recurse-submodules "$@" && cd "$(basename $\\\_ .git)"                                                              |                          |                     |
| gcam                 | git commit --all --message                                                                                                      |                          |                     |
| gcas                 | git commit --all --signoff                                                                                                      |                          |                     |
| gcasm                | git commit --all --signoff --message                                                                                            |                          |                     |
| gcmsg                | git commit --message                                                                                                            |                          |                     |
| gcsm                 | git commit --signoff --message                                                                                                  |                          |                     |
| gc                   | git commit --verbose                                                                                                            |                          |                     |
| gca                  | git commit --verbose --all                                                                                                      |                          |                     |
| gca!                 | git commit --verbose --all --amend                                                                                              |                          |                     |
| gcan!                | git commit --verbose --all --no-edit --amend                                                                                    |                          |                     |
| gcans!               | git commit --verbose --all --signoff --no-edit --amend                                                                          |                          |                     |
| gc!                  | git commit --verbose --amend                                                                                                    |                          |                     |
| gcn!                 | git commit --verbose --no-edit --amend                                                                                          |                          |                     |
| gcs                  | git commit -S                                                                                                                   |                          |                     |
| gcss                 | git commit -S -s                                                                                                                |                          |                     |
| gcssm                | git commit -S -s -m                                                                                                             |                          |                     |
| gcf                  | git config --list                                                                                                               |                          |                     |
| gdct                 | git describe --tags $(git rev-list --tags --max-count=1)                                                                        |                          |                     |
| gd                   | git diff                                                                                                                        |                          |                     |
| gdca                 | git diff --cached                                                                                                               |                          |                     |
| gdcw                 | git diff --cached --word-diff                                                                                                   |                          |                     |
| gds                  | git diff --staged                                                                                                               |                          |                     |
| gdw                  | git diff --word-diff                                                                                                            |                          |                     |
| gdv                  | git diff -w "$@" \| view -                                                                                                      |                          |                     |
| gdup                 | git diff @{upstream}                                                                                                            |                          |                     |
| gdnolock             | git diff $@ ":(exclude)package-lock.json" ":(exclude)\\\*.lock"                                                                 |                          |                     |
| gdt                  | git diff-tree --no-commit-id --name-only -r                                                                                     |                          |                     |
| gf                   | git fetch                                                                                                                       |                          |                     |
| gfa                  | git fetch --all --prune                                                                                                         |                          |                     |
| gfo                  | git fetch origin                                                                                                                |                          |                     |
| gg                   | git gui citool                                                                                                                  |                          |                     |
| gga                  | git gui citool --amend                                                                                                          |                          |                     |
| ghh                  | git help                                                                                                                        |                          |                     |
| glgg                 | git log --graph                                                                                                                 |                          |                     |
| glgga                | git log --graph --decorate --all                                                                                                |                          |                     |
| glgm                 | git log --graph --max-count=10                                                                                                  |                          |                     |
| glod                 | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset'                          |                          |                     |
| glods                | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short             |                          |                     |
| glol                 | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'                          |                          |                     |
| glola                | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --all                    |                          |                     |
| glols                | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --stat                   |                          |                     |
| glo                  | git log --oneline --decorate                                                                                                    |                          |                     |
| glog                 | git log --oneline --decorate --graph                                                                                            |                          |                     |
| gloga                | git log --oneline --decorate --graph --all                                                                                      |                          |                     |
| glp                  | git log --pretty=<format>                                                                                                       |                          |                     |
| glg                  | git log --stat                                                                                                                  |                          |                     |
| glgp                 | git log --stat --patch                                                                                                          |                          |                     |
| gignored             | git ls-files -v \| grep "^\[\[:lower:\]\]"                                                                                      |                          |                     |
| gfg                  | git ls-files \| grep                                                                                                            |                          |                     |
| gm                   | git merge                                                                                                                       |                          |                     |
| gma                  | git merge --abort                                                                                                               |                          |                     |
| gms                  | git merge --squash                                                                                                              |                          |                     |
| gmom                 | git merge origin/$(git\_main\_branch)                                                                                           |                          |                     |
| gmum                 | git merge upstream/$(git\_main\_branch)                                                                                         |                          |                     |
| gmtl                 | git mergetool --no-prompt                                                                                                       |                          |                     |
| gmtlvim              | git mergetool --no-prompt --tool=vimdiff                                                                                        |                          |                     |
| gl                   | git pull                                                                                                                        |                          |                     |
| gpr                  | git pull --rebase                                                                                                               |                          |                     |
| gprv                 | git pull --rebase -v                                                                                                            |                          |                     |
| gpra                 | git pull --rebase --autostash                                                                                                   |                          |                     |
| gprav                | git pull --rebase --autostash -v                                                                                                |                          |                     |
| gprom                | git pull --rebase origin $(git\_main\_branch)                                                                                   |                          |                     |
| gpromi               | git pull --rebase=interactive origin $(git\_main\_branch)                                                                       |                          |                     |
| ggpull               | git pull origin "$(git\_current\_branch)"                                                                                       |                          |                     |
| ggl                  | git pull origin $(current\_branch)                                                                                              |                          |                     |
| gluc                 | git pull upstream $(git\_current\_branch)                                                                                       |                          |                     |
| glum                 | git pull upstream $(git\_main\_branch)                                                                                          |                          |                     |
| gp                   | git push                                                                                                                        |                          |                     |
| gpd                  | git push --dry-run                                                                                                              |                          |                     |
| gpf!                 | git push --force                                                                                                                |                          |                     |
| ggf                  | git push --force origin $(current\_branch)                                                                                      |                          |                     |
| gpf                  | On Git >= 2.30: git push --force-with-lease --force-if-includes                                                                 |                          |                     |
| gpf                  | On Git < 2.30: git push --force-with-lease                                                                                      |                          |                     |
| ggfl                 | git push --force-with-lease origin $(current\_branch)                                                                           |                          |                     |
| gpsup                | git push --set-upstream origin $(git\_current\_branch)                                                                          |                          |                     |
| gpsupf               | On Git >= 2.30: git push --set-upstream origin $(git\_current\_branch) --force-with-lease --force-if-includes                   |                          |                     |
| gpsupf               | On Git < 2.30: git push --set-upstream origin $(git\_current\_branch) --force-with-lease                                        |                          |                     |
| gpv                  | git push --verbose                                                                                                              |                          |                     |
| gpoat                | git push origin --all && git push origin --tags                                                                                 |                          |                     |
| gpod                 | git push origin --delete                                                                                                        |                          |                     |
| ggpush               | git push origin "$(git\_current\_branch)"                                                                                       |                          |                     |
| ggp                  | git push origin $(current\_branch)                                                                                              |                          |                     |
| gpu                  | git push upstream                                                                                                               |                          |                     |
| grb                  | git rebase                                                                                                                      |                          |                     |
| grba                 | git rebase --abort                                                                                                              |                          |                     |
| grbc                 | git rebase --continue                                                                                                           |                          |                     |
| grbi                 | git rebase --interactive                                                                                                        |                          |                     |
| grbo                 | git rebase --onto                                                                                                               |                          |                     |
| grbs                 | git rebase --skip                                                                                                               |                          |                     |
| grbd                 | git rebase $(git\_develop\_branch)                                                                                              |                          |                     |
| grbm                 | git rebase $(git\_main\_branch)                                                                                                 |                          |                     |
| grbom                | git rebase origin/$(git\_main\_branch)                                                                                          |                          |                     |
| gr                   | git remote                                                                                                                      |                          |                     |
| grv                  | git remote --verbose                                                                                                            |                          |                     |
| gra                  | git remote add                                                                                                                  |                          |                     |
| grrm                 | git remote remove                                                                                                               |                          |                     |
| grmv                 | git remote rename                                                                                                               |                          |                     |
| grset                | git remote set-url                                                                                                              |                          |                     |
| grup                 | git remote update                                                                                                               |                          |                     |
| grh                  | git reset                                                                                                                       |                          |                     |
| gru                  | git reset --                                                                                                                    |                          |                     |
| grhh                 | git reset --hard                                                                                                                |                          |                     |
| grhk                 | git reset --keep                                                                                                                |                          |                     |
| grhs                 | git reset --soft                                                                                                                |                          |                     |
| gpristine            | git reset --hard && git clean -dffx                                                                                             |                          |                     |
| groh                 | git reset origin/$(git\_current\_branch) --hard                                                                                 |                          |                     |
| grs                  | git restore                                                                                                                     |                          |                     |
| grss                 | git restore --source                                                                                                            |                          |                     |
| grst                 | git restore --staged                                                                                                            |                          |                     |
| gunwip               | git rev-list --max-count=1 --format="%s" HEAD \| grep -q "--wip--" && git reset HEAD\~1                                         |                          |                     |
| grev                 | git revert                                                                                                                      |                          |                     |
| grm                  | git rm                                                                                                                          |                          |                     |
| grmc                 | git rm --cached                                                                                                                 |                          |                     |
| gcount               | git shortlog --summary -n                                                                                                       |                          |                     |
| gsh                  | git show                                                                                                                        |                          |                     |
| gsps                 | git show --pretty=short --show-signature                                                                                        |                          |                     |
| gstall               | git stash --all                                                                                                                 |                          |                     |
| gstu                 | git stash --include-untracked                                                                                                   |                          |                     |
| gstaa                | git stash apply                                                                                                                 |                          |                     |
| gstc                 | git stash clear                                                                                                                 |                          |                     |
| gstd                 | git stash drop                                                                                                                  |                          |                     |
| gstl                 | git stash list                                                                                                                  |                          |                     |
| gstp                 | git stash pop                                                                                                                   |                          |                     |
| gsta                 | On Git >= 2.13: git stash push                                                                                                  |                          |                     |
| gsta                 | On Git < 2.13: git stash save                                                                                                   |                          |                     |
| gsts                 | git stash show --patch                                                                                                          |                          |                     |
| gst                  | git status                                                                                                                      |                          |                     |
| gss                  | git status --short                                                                                                              |                          |                     |
| gsb                  | git status --short -b                                                                                                           |                          |                     |
| gsi                  | git submodule init                                                                                                              |                          |                     |
| gsu                  | git submodule update                                                                                                            |                          |                     |
| gsd                  | git svn dcommit                                                                                                                 |                          |                     |
| git-svn-dcommit-push | git svn dcommit && git push github $(git\_main\_branch):svntrunk                                                                |                          |                     |
| gsr                  | git svn rebase                                                                                                                  |                          |                     |
| gsw                  | git switch                                                                                                                      |                          |                     |
| gswc                 | git switch -c                                                                                                                   |                          |                     |
| gswd                 | git switch $(git\_develop\_branch)                                                                                              |                          |                     |
| gswm                 | git switch $(git\_main\_branch)                                                                                                 |                          |                     |
| gta                  | git tag --annotate                                                                                                              |                          |                     |
| gts                  | git tag -s                                                                                                                      |                          |                     |
| gtv                  | git tag \| sort -V                                                                                                              |                          |                     |
| gignore              | git update-index --assume-unchanged                                                                                             |                          |                     |
| gunignore            | git update-index --no-assume-unchanged                                                                                          |                          |                     |
| gwch                 | git whatchanged -p --abbrev-commit --pretty=medium                                                                              |                          |                     |
| gwt                  | git worktree                                                                                                                    |                          |                     |
| gwtls                | git worktree list                                                                                                               |                          |                     |
| gwtmv                | git worktree move                                                                                                               |                          |                     |
| gwtrm                | git worktree remove                                                                                                             |                          |                     |
| gk                   | gitk --all --branches &!                                                                                                        |                          |                     |
| gke                  | gitk --all $(git log --walk-reflogs --pretty=%h) &!                                                                             |                          |                     |
| gtl                  | gtl(){ git tag --sort=-v:refname -n --list ${1}\\\* }; noglob gtl                                                               |                          |                     |

*Source: [oh-my-zsh git repository](https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/git/README.md)*

Get my `.zshrc` configuration file and plugins for FREE