Add alias-finder plugin (#7768)
parent
97c0d0a563
commit
90a0de4698
2 changed files with 92 additions and 0 deletions
@ -0,0 +1,46 @@ |
||||
# alias-finder plugin |
||||
|
||||
This plugin searches the defined aliases and outputs any that match the command inputted. This makes learning new aliases easier. |
||||
|
||||
To use it, add `alias-finder` to the `plugins` array of your zshrc file: |
||||
``` |
||||
plugins=(... alias-finder) |
||||
``` |
||||
|
||||
## Usage |
||||
To see if there is an alias defined for the command, pass it as an argument to `alias-finder`. This can also run automatically before each command you input - add `ZSH_ALIAS_FINDER_AUTOMATIC=true` to your zshrc if you want this. |
||||
|
||||
## Options |
||||
|
||||
- Use `--longer` or `-l` to allow the aliases to be longer than the input (match aliases if they contain the input). |
||||
- Use `--exact` or `-e` to avoid matching aliases that are shorter than the input. |
||||
|
||||
## Examples |
||||
``` |
||||
$ alias-finder "git pull" |
||||
gl='git pull' |
||||
g=git |
||||
``` |
||||
``` |
||||
$ alias-finder "web_search google oh my zsh" |
||||
google='web_search google' |
||||
``` |
||||
``` |
||||
$ alias-finder "git commit -v" |
||||
gc="git commit -v" |
||||
g=git |
||||
``` |
||||
``` |
||||
$ alias-finder -e "git commit -v" |
||||
gc='git commit -v' |
||||
``` |
||||
``` |
||||
$ alias-finder -l "git commit -v" |
||||
gc='git commit -v' |
||||
'gc!'='git commit -v --amend' |
||||
gca='git commit -v -a' |
||||
'gca!'='git commit -v -a --amend' |
||||
'gcan!'='git commit -v -a --no-edit --amend' |
||||
'gcans!'='git commit -v -a -s --no-edit --amend' |
||||
'gcn!'='git commit -v --no-edit --amend' |
||||
``` |
||||
@ -0,0 +1,46 @@ |
||||
alias-finder() { |
||||
local cmd="" exact="" longer="" wordStart="" wordEnd="" multiWordEnd="" |
||||
for i in $@; do |
||||
case $i in |
||||
-e|--exact) exact=true;; |
||||
-l|--longer) longer=true;; |
||||
*) |
||||
if [[ -z $cmd ]]; then |
||||
cmd=$i |
||||
else |
||||
cmd="$cmd $i" |
||||
fi |
||||
;; |
||||
esac |
||||
done |
||||
cmd=$(sed 's/[].\|$(){}?+*^[]/\\&/g' <<< $cmd) # adds escaping for grep |
||||
if [[ $(wc -l <<< $cmd) == 1 ]]; then |
||||
while [[ $cmd != "" ]]; do |
||||
if [[ $longer = true ]]; then |
||||
wordStart="'{0,1}" |
||||
else |
||||
wordEnd="$" |
||||
multiWordEnd="'$" |
||||
fi |
||||
if [[ $cmd == *" "* ]]; then |
||||
local finder="'$cmd$multiWordEnd" |
||||
else |
||||
local finder=$wordStart$cmd$wordEnd |
||||
fi |
||||
alias | grep -E "=$finder" |
||||
if [[ $exact = true || $longer = true ]]; then |
||||
break |
||||
else |
||||
cmd=$(sed -E 's/ {0,1}[^ ]*$//' <<< $cmd) # removes last word |
||||
fi |
||||
done |
||||
fi |
||||
} |
||||
|
||||
preexec_alias-finder() { |
||||
if [[ $ZSH_ALIAS_FINDER_AUTOMATIC = true ]]; then |
||||
alias-finder $1 |
||||
fi |
||||
} |
||||
|
||||
preexec_functions+=(preexec_alias-finder) |
||||
Loading…
Reference in new issue