mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-02-12 05:49:47 +08:00
Compare commits
3 Commits
33c0de7add
...
03a0d5bbae
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
03a0d5bbae | ||
|
|
13a8e3d98a | ||
|
|
c92af18c36 |
@ -100,8 +100,8 @@ function detect-clipboard() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Detect at startup. A non-zero exit here indicates that the dummy clipboards were set,
|
function clipcopy clippaste {
|
||||||
# which is not really an error. If the user calls them, they will attempt to redetect
|
unfunction clipcopy clippaste
|
||||||
# (for example, perhaps the user has now installed xclip) and then either print an error
|
detect-clipboard || true # let one retry
|
||||||
# or proceed successfully.
|
"$0" "$@"
|
||||||
detect-clipboard || true
|
}
|
||||||
|
|||||||
9
plugins/alias-finder/.zunit.yml
Normal file
9
plugins/alias-finder/.zunit.yml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
tap: false
|
||||||
|
directories:
|
||||||
|
tests: tests
|
||||||
|
output: tests/_output
|
||||||
|
support: tests/_support
|
||||||
|
time_limit: 0
|
||||||
|
fail_fast: false
|
||||||
|
allow_risky: false
|
||||||
|
verbose: true
|
||||||
@ -2,45 +2,32 @@
|
|||||||
|
|
||||||
This plugin searches the defined aliases and outputs any that match the command inputted. This makes learning new aliases easier.
|
This plugin searches the defined aliases and outputs any that match the command inputted. This makes learning new aliases easier.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
To use it, add `alias-finder` to the `plugins` array of your zshrc file:
|
To use it, add `alias-finder` to the `plugins` array of your zshrc file:
|
||||||
```
|
```
|
||||||
plugins=(... alias-finder)
|
plugins=(... alias-finder)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
To enable it for every single command, set zstyle in your `~/.zshrc`.
|
||||||
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
|
```zsh
|
||||||
|
# ~/.zshrc
|
||||||
|
|
||||||
|
zstyle ':omz:plugins:alias-finder' autoload yes # disabled by default
|
||||||
|
zstyle ':omz:plugins:alias-finder' longer yes # disabled by default
|
||||||
|
zstyle ':omz:plugins:alias-finder' exact yes # disabled by default
|
||||||
|
zstyle ':omz:plugins:alias-finder' cheaper yes # disabled by default
|
||||||
|
```
|
||||||
|
|
||||||
|
As you can see, options are also available with zstyle.
|
||||||
|
|
||||||
|
### Options
|
||||||
|
|
||||||
|
> In order to clarify, let's say `alias a=abc` has source 'abc' and destination 'a'.
|
||||||
|
|
||||||
|
- Use `--longer` or `-l` to include aliases where the source is longer than the input (in other words, the source could contain the whole input).
|
||||||
|
- Use `--exact` or `-e` to avoid aliases where the source is shorter than the input (in other words, the source must be the same with the input).
|
||||||
|
- Use `--cheaper` or `-c` to avoid aliases where the destination is longer than the input (in other words, the destination must be the shorter than the input).
|
||||||
|
|
||||||
- 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'
|
|
||||||
```
|
|
||||||
|
|||||||
@ -1,44 +1,59 @@
|
|||||||
alias-finder() {
|
alias-finder() {
|
||||||
local cmd="" exact="" longer="" wordStart="" wordEnd="" multiWordEnd=""
|
local cmd=" " exact="" longer="" cheaper="" wordEnd="'{0,1}$" finder="" filter=""
|
||||||
for i in $@; do
|
|
||||||
case $i in
|
# build command and options
|
||||||
|
for c in "$@"; do
|
||||||
|
case $c in
|
||||||
|
# TODO: Remove backward compatibility (other than zstyle form)
|
||||||
|
# set options if exist
|
||||||
-e|--exact) exact=true;;
|
-e|--exact) exact=true;;
|
||||||
-l|--longer) longer=true;;
|
-l|--longer) longer=true;;
|
||||||
*)
|
-c|--cheaper) cheaper=true;;
|
||||||
if [[ -z $cmd ]]; then
|
# concatenate cmd
|
||||||
cmd=$i
|
*) cmd="$cmd$c " ;;
|
||||||
else
|
|
||||||
cmd="$cmd $i"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
cmd=$(sed 's/[].\|$(){}?+*^[]/\\&/g' <<< $cmd) # adds escaping for grep
|
|
||||||
if (( $(wc -l <<< $cmd) == 1 )); then
|
zstyle -t ':omz:plugins:alias-finder' longer && longer=true
|
||||||
while [[ $cmd != "" ]]; do
|
zstyle -t ':omz:plugins:alias-finder' exact && exact=true
|
||||||
if [[ $longer = true ]]; then
|
zstyle -t ':omz:plugins:alias-finder' cheaper && cheaper=true
|
||||||
wordStart="'{0,1}"
|
|
||||||
else
|
# format cmd for grep
|
||||||
wordEnd="$"
|
## - replace newlines with spaces
|
||||||
multiWordEnd="'$"
|
## - trim both ends
|
||||||
fi
|
## - replace multiple spaces with one space
|
||||||
if [[ $cmd == *" "* ]]; then
|
## - add escaping character to special characters
|
||||||
local finder="'$cmd$multiWordEnd"
|
cmd=$(echo -n "$cmd" | tr '\n' ' ' | xargs | tr -s '[:space:]' | sed 's/[].\|$(){}?+*^[]/\\&/g')
|
||||||
else
|
|
||||||
local finder=$wordStart$cmd$wordEnd
|
if [[ $longer == true ]]; then
|
||||||
fi
|
wordEnd="" # remove wordEnd to find longer aliases
|
||||||
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
|
fi
|
||||||
|
|
||||||
|
# find with alias and grep, removing last word each time until no more words
|
||||||
|
while [[ $cmd != "" ]]; do
|
||||||
|
finder="'{0,1}$cmd$wordEnd"
|
||||||
|
|
||||||
|
# make filter to find only shorter results than current cmd
|
||||||
|
if [[ $cheaper == true ]]; then
|
||||||
|
cmdLen=$(echo -n "$cmd" | wc -c)
|
||||||
|
filter="^'{0,1}.{0,$((cmdLen - 1))}="
|
||||||
|
fi
|
||||||
|
|
||||||
|
alias | grep -E "$filter" | grep -E "=$finder"
|
||||||
|
|
||||||
|
if [[ $exact == true ]]; then
|
||||||
|
break # because exact case is only one
|
||||||
|
elif [[ $longer = true ]]; then
|
||||||
|
break # because above grep command already found every longer aliases during first cycle
|
||||||
|
fi
|
||||||
|
|
||||||
|
cmd=$(sed -E 's/ {0,}[^ ]*$//' <<< "$cmd") # remove last word
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
preexec_alias-finder() {
|
preexec_alias-finder() {
|
||||||
if [[ $ZSH_ALIAS_FINDER_AUTOMATIC = true ]]; then
|
# TODO: Remove backward compatibility (other than zstyle form)
|
||||||
|
zstyle -t ':omz:plugins:alias-finder' autoload && alias-finder $1 || if [[ $ZSH_ALIAS_FINDER_AUTOMATIC = true ]]; then
|
||||||
alias-finder $1
|
alias-finder $1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
0
plugins/alias-finder/tests/_output/.gitkeep
Normal file
0
plugins/alias-finder/tests/_output/.gitkeep
Normal file
0
plugins/alias-finder/tests/_support/.gitkeep
Normal file
0
plugins/alias-finder/tests/_support/.gitkeep
Normal file
2
plugins/alias-finder/tests/_support/bootstrap
Normal file
2
plugins/alias-finder/tests/_support/bootstrap
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Write your bootstrap code here
|
||||||
107
plugins/alias-finder/tests/test_run.sh
Normal file
107
plugins/alias-finder/tests/test_run.sh
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
#!/usr/bin/env zunit
|
||||||
|
|
||||||
|
@setup {
|
||||||
|
load ../alias-finder.plugin.zsh
|
||||||
|
|
||||||
|
set_git_aliases() {
|
||||||
|
unalias -a # all
|
||||||
|
alias g="git"
|
||||||
|
alias gc="git commit"
|
||||||
|
alias gcv="git commit -v"
|
||||||
|
alias gcvs="git commit -v -S"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@test 'find aliases that contain input' {
|
||||||
|
set_git_aliases
|
||||||
|
|
||||||
|
run alias-finder "git"
|
||||||
|
|
||||||
|
assert "${#lines[@]}" equals 1
|
||||||
|
assert "${lines[1]}" same_as "g=git"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test 'find aliases that contain input with whitespaces at ends' {
|
||||||
|
set_git_aliases
|
||||||
|
|
||||||
|
run alias-finder " git "
|
||||||
|
|
||||||
|
assert "${#lines[@]}" equals 1
|
||||||
|
assert "${lines[1]}" same_as "g=git"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test 'find aliases that contain multiple words' {
|
||||||
|
set_git_aliases
|
||||||
|
|
||||||
|
run alias-finder "git commit -v"
|
||||||
|
|
||||||
|
assert "${#lines[@]}" equals 3
|
||||||
|
assert "${lines[1]}" same_as "gcv='git commit -v'"
|
||||||
|
assert "${lines[2]}" same_as "gc='git commit'"
|
||||||
|
assert "${lines[3]}" same_as "g=git"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test 'find alias that is the same with input when --exact option is set' {
|
||||||
|
set_git_aliases
|
||||||
|
|
||||||
|
run alias-finder -e "git"
|
||||||
|
|
||||||
|
assert "${#lines[@]}" equals 1
|
||||||
|
assert "${lines[1]}" same_as "g=git"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test 'find alias that is the same with multiple words input when --exact option is set' {
|
||||||
|
set_git_aliases
|
||||||
|
|
||||||
|
run alias-finder -e "git commit -v"
|
||||||
|
|
||||||
|
assert "${#lines[@]}" equals 1
|
||||||
|
assert "${lines[1]}" same_as "gcv='git commit -v'"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test 'find alias that is the same with or longer than input when --longer option is set' {
|
||||||
|
set_git_aliases
|
||||||
|
|
||||||
|
run alias-finder -l "git"
|
||||||
|
|
||||||
|
assert "${#lines[@]}" equals 4
|
||||||
|
assert "${lines[1]}" same_as "g=git"
|
||||||
|
assert "${lines[2]}" same_as "gc='git commit'"
|
||||||
|
assert "${lines[3]}" same_as "gcv='git commit -v'"
|
||||||
|
assert "${lines[4]}" same_as "gcvs='git commit -v -S'"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test 'find alias that is the same with or longer than multiple words input when --longer option is set' {
|
||||||
|
set_git_aliases
|
||||||
|
|
||||||
|
run alias-finder -l "git commit -v"
|
||||||
|
|
||||||
|
assert "${#lines[@]}" equals 2
|
||||||
|
assert "${lines[1]}" same_as "gcv='git commit -v'"
|
||||||
|
assert "${lines[2]}" same_as "gcvs='git commit -v -S'"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test 'find aliases including expensive (longer) than input' {
|
||||||
|
set_git_aliases
|
||||||
|
alias expensiveCommands="git commit"
|
||||||
|
|
||||||
|
run alias-finder "git commit -v"
|
||||||
|
|
||||||
|
assert "${#lines[@]}" equals 4
|
||||||
|
assert "${lines[1]}" same_as "gcv='git commit -v'"
|
||||||
|
assert "${lines[2]}" same_as "expensiveCommands='git commit'"
|
||||||
|
assert "${lines[3]}" same_as "gc='git commit'"
|
||||||
|
assert "${lines[4]}" same_as "g=git"
|
||||||
|
}
|
||||||
|
|
||||||
|
@test 'find aliases excluding expensive (longer) than input when --cheap option is set' {
|
||||||
|
set_git_aliases
|
||||||
|
alias expensiveCommands="git commit"
|
||||||
|
|
||||||
|
run alias-finder -c "git commit -v"
|
||||||
|
|
||||||
|
assert "${#lines[@]}" equals 3
|
||||||
|
assert "${lines[1]}" same_as "gcv='git commit -v'"
|
||||||
|
assert "${lines[2]}" same_as "gc='git commit'"
|
||||||
|
assert "${lines[3]}" same_as "g=git"
|
||||||
|
}
|
||||||
@ -40,12 +40,12 @@ plugins=(... git)
|
|||||||
| gbd | git branch --delete |
|
| gbd | git branch --delete |
|
||||||
| gbD | git branch --delete --force |
|
| gbD | git branch --delete --force |
|
||||||
| gbda | git branch --no-color --merged | grep -vE "^([+]|\s($(git_main_branch)|$(git_develop_branch))\s\*$)" | xargs git branch --delete 2>/dev/null |
|
| gbda | git branch --no-color --merged | grep -vE "^([+]|\s($(git_main_branch)|$(git_develop_branch))\s\*$)" | xargs git branch --delete 2>/dev/null |
|
||||||
| gbgd | git branch --no-color -vv |
|
| gbgd | LANG=C git branch --no-color -vv | grep ": gone\]" | awk '"'"'{print $1}'"'"' | xargs git branch -d |
|
||||||
| gbgD | git branch --no-color -vv |
|
| gbgD | LANG=C git branch --no-color -vv | grep ": gone\]" | awk '"'"'{print $1}'"'"' | xargs git branch -D |
|
||||||
| gbnm | git branch --no-merged |
|
| gbnm | git branch --no-merged |
|
||||||
| gbr | git branch --remote |
|
| gbr | git branch --remote |
|
||||||
| ggsup | git branch --set-upstream-to=origin/$(git_current_branch) |
|
| ggsup | git branch --set-upstream-to=origin/$(git_current_branch) |
|
||||||
| gbg | git branch -vv |
|
| gbg | LANG=C git branch -vv | grep ": gone\]" |
|
||||||
| gco | git checkout |
|
| gco | git checkout |
|
||||||
| gcor | git checkout --recurse-submodules |
|
| gcor | git checkout --recurse-submodules |
|
||||||
| gcb | git checkout -b |
|
| gcb | git checkout -b |
|
||||||
|
|||||||
@ -121,12 +121,12 @@ alias gba='git branch --all'
|
|||||||
alias gbd='git branch --delete'
|
alias gbd='git branch --delete'
|
||||||
alias gbD='git branch --delete --force'
|
alias gbD='git branch --delete --force'
|
||||||
alias gbda='git branch --no-color --merged | command grep -vE "^([+*]|\s*($(git_main_branch)|$(git_develop_branch))\s*$)" | command xargs git branch --delete 2>/dev/null'
|
alias gbda='git branch --no-color --merged | command grep -vE "^([+*]|\s*($(git_main_branch)|$(git_develop_branch))\s*$)" | command xargs git branch --delete 2>/dev/null'
|
||||||
alias gbgd='git branch --no-color -vv | grep ": gone\]" | awk '"'"'{print $1}'"'"' | xargs git branch -d'
|
alias gbgd='LANG=C git branch --no-color -vv | grep ": gone\]" | awk '"'"'{print $1}'"'"' | xargs git branch -d'
|
||||||
alias gbgD='git branch --no-color -vv | grep ": gone\]" | awk '"'"'{print $1}'"'"' | xargs git branch -D'
|
alias gbgD='LANG=C git branch --no-color -vv | grep ": gone\]" | awk '"'"'{print $1}'"'"' | xargs git branch -D'
|
||||||
alias gbnm='git branch --no-merged'
|
alias gbnm='git branch --no-merged'
|
||||||
alias gbr='git branch --remote'
|
alias gbr='git branch --remote'
|
||||||
alias ggsup='git branch --set-upstream-to=origin/$(git_current_branch)'
|
alias ggsup='git branch --set-upstream-to=origin/$(git_current_branch)'
|
||||||
alias gbg='git branch -vv | grep ": gone\]"'
|
alias gbg='LANG=C git branch -vv | grep ": gone\]"'
|
||||||
alias gco='git checkout'
|
alias gco='git checkout'
|
||||||
alias gcor='git checkout --recurse-submodules'
|
alias gcor='git checkout --recurse-submodules'
|
||||||
alias gcb='git checkout -b'
|
alias gcb='git checkout -b'
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user