• Stars
    star
    1,458
  • Rank 32,260 (Top 0.7 %)
  • Language
    Shell
  • License
    GNU General Publi...
  • Created over 7 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

📎 ZSH plugin that reminds you to use existing aliases for commands you just typed

You Should Use

CircleCI Version GPLv3

Simple zsh plugin that reminds you that you should use one of your existing aliases for a command you just typed.

Also supports detection of global and git aliases.

Customization

Advanced Features

Contributing

You can also view the CHANGELOG for a history of changes.

Usage

You dont need to do anything. Once it's installed, zsh-you-should-use will let you know if you wrote a command with an existing alias.

img/alias.png

you-should-use also detects global aliases:

img/global.png

and Git aliases:

img/git.png

Requirements

you-should-use officially supports zsh versions 5.1 onwards.

It is possible the plugin might work on even older versions. However they would not have been tested as part of the CI test process.

Installation

Add one of the following to your .zshrc file depending on your package manager:

ZPlug

zplug "MichaelAquilina/zsh-you-should-use"

Antigen

antigen bundle "MichaelAquilina/zsh-you-should-use"

Zgen

zgen load "MichaelAquilina/zsh-you-should-use"

Fig

Install zsh-you-should-use with Fig in just one click.

Install with Fig

oh-my-zsh

Clone this repository into $ZSH_CUSTOM/custom/plugins:

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

$ZSH_CUSTOM is oh-my-zsh’s customization directory (docs).

Then add you-should-use to the plugins array in your .zshrc:

plugins=(
    # ...
    you-should-use
    # ...
)

Arch Linux

Install the zsh-you-should-use (AUR) package:

yay -S zsh-you-should-use

Then add this line to your .zshrc:

source /usr/share/zsh/plugins/zsh-you-should-use/you-should-use.plugin.zsh

Message Position

By default, you-should-use will display its reminder message before a command has executed. However, you can choose to display the mesasge after a command has executed by setting the value of YSU_MESSAGE_POSITION.

export YSU_MESSAGE_POSITION="after"

Displaying Results

By default, you-should-use will display the best match from any matching aliases found. However, you can change this behaviour so that it displays all matches found by setting the value of YSU_MODE.

  • To only display best match (default): export YSU_MODE=BESTMATCH
  • To display all matches: export YSU_MODE=ALL

Customising Messages

By default, the following message is displayed in bold when an alias is found:

Found existing %alias_type for "%command". You should use: "%alias"

Where the following variables represent:

  • %alias_type - the type of alias detected (alias, git alias, global alias)
  • %command - the command that was typed by the user
  • %alias - the matching alias that was found

This default message can be customised by setting the YSU_MESSAGE_FORMAT environment variable.

If for example, you wish to display your own custom message in red, you can add the following to your ~/.zshrc:

export YSU_MESSAGE_FORMAT="$(tput setaf 1)Hey! I found this %alias_type for %command: %alias$(tput sgr0)"

$(tput setaf 1) generates the escape code terminals use for red foreground text. $(tput sgr0) sets the text back to a normal color.

You can read more about how you can use tput and terminal escape codes here: http://wiki.bash-hackers.org/scripting/terminalcodes

Hardcore Mode

For the brave and adventerous only :godmode:

You can enable Hardcore mode to enforce the use of aliases. Enabling this will cause zsh to refuse to execute commands you have entered if an alternative alias for it exists. This is a handy way of forcing you to use your aliases and help you turn those aliases into muscle memory.

Enable hardcore mode by setting the variable YSU_HARDCORE to 1.

export YSU_HARDCORE=1

Now if you type a command that has an alias defined and you didnt use it, zsh will refuse to execute that command:

$ export YSU_HARDCORE=1
$ ls -lh
Found existing alias for "ls -lh". You should use: "ll"
You Should Use hardcore mode enabled. Use your aliases!
$ ll
total 8.0K
-rw-r--r-- 1 michael users 2.4K Jun 19 20:46 README.md
-rw-r--r-- 1 michael users  650 Jun 19 20:42 you-should-use.plugin.zsh

Check your Alias usage

It's often useful to check how often we use our aliases so that we have an idea of which ones we could probably get rid of (or remind ourselves of them if we forgot). zsh-you-should-use provides a convenience function check_alias_usage which you can run to analyse your alias usage.

$ check_alias_usage
924: curl='curl --silent'
652: gco='git checkout'
199: json='jq '.' -C'
157: less='less -R'
100: ll='ls -lh --group-directories-first'
93: vim='nvim'
76: watch='watch '
61: v='vim'
60: md='mkdir'
39: gr='git rebase'
38: dc='docker-compose'
35: ls='ls --color=auto'
33: h='history'
28: dcr='docker-compose

check_alias_usage analyses your history to generate this data for you. If your history is disabled or if you limit your history to a certain amount of time, then the alias report generated will be a reflection of the limited data available.

Optionally, you can limit how far check_alias_usage looks back in history by providing an optional numeric parameter. This parameter specifies how many entries in the history to check when generating the report. In the example below, history is limited to the last 200 entries when generating the alias report.

$ check_alias_usage 200
9: h='history'
3: gpoh='git push -u origin HEAD'
3: gco='git checkout'
2: v='vim'
2: ll='ls -lh --group-directories-first'
2: gpohw='gpoh && git web --pull-request'
2: gc='git commit'
2: gap='git add -p'
2: ap='ansible-playbook'
1: xopen='GDK_BACKEND=wayland xdg-open'
1: t='tig'
1: gw='git web'
1: gs='git status'

Disable Hints for specific Aliases

You can tell you-should-use to permanently ignore certain aliases by including them in the YSU_IGNORED_ALIASES variable (which is an array):

$ ls -l
Found existing alias for "ls -l". You should use: "ll"

$ export YSU_IGNORED_ALIASES=("g" "ll")
$ ls -l

If you want to ignore global aliases, use the YSU_IGNORED_GLOBAL_ALIASES environment variable.

$ cd ../..
Found existing global alias for "../..". You should use: "..."

$ export YSU_IGNORED_GLOBAL_ALIASES=("...")
$ cd ../..

Temporarily Disabling Messages

You can temporarily disable you should use by running the command disable_you_should_use.

When you want to re-enable messages, run the command enable_you_should_use.

Contributing

Pull requests and Feedback are welcome! 🎉

I have tried to cater for as many use cases that I can think of. However, they are naturally tailored to to my own workflow and I could be missing many others.

Because of this if there is a specific use case that does not work as you would expect or if you have any suggestions to how the plugin should behave, feel free to open an issue

Running Tests

Install zunit. Run zunit in the root directory of the repo.

$ zunit
Launching ZUnit
ZUnit: 0.8.2
ZSH:   zsh 5.3.1 (x86_64-suse-linux-gnu)

✔ ysu message correct output
✔ ysu global message correct output
✔ ysu git message correct output

NOTE: It is required that you use a minimum zunit version of 0.8.2

NOTE: The tests that run move your git configuration to a temporary location during the test process so that your user configuration does not interfere with tests. This will be restored at the end of each test so there is no risk in losing your settings. If for some strange reason zunit crashes or does not restore your git configuration automatically, all you need to do is run mv ~/.gitconfig.bak ~/.gitconfig

More Repositories

1

zsh-autoswitch-virtualenv

🐍 ZSH plugin to automatically switch python virtualenvs (including pipenv and poetry) as you move between directories
Shell
422
star
2

zsh-auto-notify

⏰ ZSH plugin that automatically sends out a notification when a long running task has completed.
Shell
404
star
3

python-tools

🔧 Atom plugin which uses jedi to provide numerous tools useful for developing python code in atom.
Python
99
star
4

flake8-spellcheck

❄️ Spellcheck variables, classnames, comments, docstrings etc
Python
71
star
5

S4

🔄 Fast and cheap synchronisation of files using Amazon S3
Python
71
star
6

synapse-project

Powerful fuzzy search launcher for a multitude of tasks
Vala
49
star
7

improved-workspace-indicator

gnome-shell extension that provides a workspace indicator similar to i3/sway
JavaScript
41
star
8

lifx-cmd

💡 Command line tool for controlling LifX bulbs
Python
39
star
9

ubuntu-ansible

Set up a Ubuntu machine from scratch
Python
37
star
10

hashedindex

Python package providing an Inverted Index implementation using dictionaries
Python
34
star
11

wdisplays

GUI display configurator for wlroots compositors
C
28
star
12

zsh-history-filter

🔍 Zsh plugin to filter out some commands from being added to you history
Shell
28
star
13

tro

Trello command line utility written in Rust
Rust
27
star
14

Some-2D-RPG

Tinkering with Game Development
C#
27
star
15

Fuzzy-Logic-Controller

A simulator for a boiler with a fuzzy logic controller to control the pressure.
C#
15
star
16

zsh-emojis

Variables for numerous ascii emojis!
Shell
14
star
17

git-commands

Various helpful git commands for your git workflow
Shell
11
star
18

flake8-graphql

Flake8 plugin to lint your GraphQL query strings in Python
Python
11
star
19

tumbleweed-ansible

Setup an OpenSUSE Tumbleweed Machine from scratch
Shell
10
star
20

Web-Scraping-Scripts

A Random set of Scripts that can be used on various machines
Python
8
star
21

Reddit-Recommender-Bot

Indentifying Interesting Documents for Reddit using Recommender Techniques
Python
7
star
22

Windows-Pixel-Ruler

A simple tool to measure the pixel length of items on the screen.
C#
6
star
23

SDL2-Pong

Development of Pong with SDL2
C++
5
star
24

SpamFilter

Classification of emails using machine learning and natural language processing techniques in Java
TeX
5
star
25

Whatsappium

Firefox and Chrome extension that allows you to use Keyboard shortcuts for Whatsapp Web
JavaScript
4
star
26

apm-ansible

Manage your Atom packages using ansible
Python
3
star
27

todolist

Simple todolist manager to keep track of my daily life from the command line
Python
3
star
28

gsettings-ansible

Control gsettings using ansible!
Python
3
star
29

me-thinks-it-is-like-a-weasel

Simple Genetic Algorithm inspired by Richard Dawkin's "The Blind Watchmaker"
Python
2
star
30

Snakes

Multiplayer Snakes for UNIX based terminals developed using C and Ncurses.
C
2
star
31

fedora-ansible

Setup a fedora machine using ansible from scratch
Shell
2
star
32

smart-light-ui

Gtk UI for interacting with Smart Light bulbs
Python
2
star
33

Document-Classification

Classification of SGML documents using Natural Language Processing and Machine Learning techniques
C#
1
star
34

swayconfig

Sway Configuration files
Shell
1
star
35

atom-better-window-title

Improve Atom's window title
JavaScript
1
star
36

atom-pgp

🔑 Atom plugin to open and save PGP encrypted files
CoffeeScript
1
star
37

Notebook

Python notebook with various commands
Python
1
star
38

restructured-preview

Atom package to preview restructured text files
Python
1
star
39

Reddit-Data

Archive for post data from several subreddits to be used for a Recommender Agent
Python
1
star
40

pytextparser

Python
1
star
41

adventofcode2018

My solutions to advent of code 2018 in Rust
Rust
1
star
42

NeuralNetwork

A Neural Network library in C#
C#
1
star
43

Resume

Personal Resume
1
star
44

zshrc

Personal zshrc configuration file
Shell
1
star
45

adventofcode2020

Solutions for https://adventofcode.com/2020/
Rust
1
star
46

i3config

i3 configuration files
Python
1
star
47

adventofcode2021

Rust
1
star