zsh - 在调用结束时没有 space 的别名
zsh - alias with no space at the end of the invocation
我想要一个像这样的别名:
alias gra-bitbucket="gra origin https://gismoranas@bitbucket.org/gismoranas"
这样我就可以像这样使用它了:
gra-bitbucket/some-repo.git
将新源添加到 git 存储库(gra 是 oh-my-zsh! 别名)。
我的问题是我不想每次都写完整 url。它一定不能是别名,但最好有一个衬里设置。
请注意,这是针对原始问题而写的,它没有消除是否在别名调用的末尾指定“没有space”或没有[=40]的歧义=] 在调用的命令中别名定义的代码和用户提供的代码之间。
不要为此使用别名;函数是更好的工具。
gra-bitbucket() { gra origin https://gismoranas@bitbucket.org/gismoranas"$@"; }
如果您的 shell 是(旧版本的)bash 而不是 zsh,您可能需要使用 function
关键字来定义名称中带有破折号的函数(这在 POSIX 规则下是不允许的)。因此:
# this version works with bash as well (but not POSIX sh)
function gra-bitbucket { gra origin https://gismoranas@bitbucket.org/gismoranas"$@"; }
...或者,如果您想符合任何 POSIX shell,请从名称中删除 -
(在这种情况下,替换为 _
):
# this version works with all POSIX shells
gra_bitbucket() { gra origin https://gismoranas@bitbucket.org/gismoranas"$@"; }
在所有这些情况下,用法(但 POSIX 形式中的名称更改除外)与您想要的别名的用法相同,如果该别名可能的话:
gra-bitbucket /some-repo.git
...将参考 https://gismoranas@bitbucket.org/gismoranas/some-repo.git
来源:https://blog.sebastian-daschner.com/entries/zsh-aliases
将以下内容放入您的 .zshrc:
# blank aliases
typeset -a baliases
baliases=()
balias() {
alias $@
args="$@"
args=${args%%\=*}
baliases+=(${args##* })
}
# ignored aliases
typeset -a ialiases
ialiases=()
ialias() {
alias $@
args="$@"
args=${args%%\=*}
ialiases+=(${args##* })
}
# functionality
expand-alias-space() {
[[ $LBUFFER =~ "\<(${(j:|:)baliases})$" ]]; insertBlank=$?
if [[ ! $LBUFFER =~ "\<(${(j:|:)ialiases})$" ]]; then
zle _expand_alias
fi
zle self-insert
if [[ "$insertBlank" = "0" ]]; then
zle backward-delete-char
fi
}
zle -N expand-alias-space
bindkey " " expand-alias-space
bindkey -M isearch " " magic-space
现在您可以:
# command aliases
alias jj='java -jar'
alias mcp='mvn clean package'
...
# blank aliases, without trailing whitespace
balias clh='curl localhost:'
...
# "ignored" aliases, not expanded
ialias l='exa -al'
ialias curl='curl --silent --show-error'
...
# global aliases
alias -g L='| less'
alias -g G='| grep'
ialias -g grep='grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}'
具体来说,对于你的问题,你需要上面定义的balias
函数:
balias gra-bitbucket="gra origin https://gismoranas@bitbucket.org/gismoranas"
我想要一个像这样的别名:
alias gra-bitbucket="gra origin https://gismoranas@bitbucket.org/gismoranas"
这样我就可以像这样使用它了:
gra-bitbucket/some-repo.git
将新源添加到 git 存储库(gra 是 oh-my-zsh! 别名)。
我的问题是我不想每次都写完整 url。它一定不能是别名,但最好有一个衬里设置。
请注意,这是针对原始问题而写的,它没有消除是否在别名调用的末尾指定“没有space”或没有[=40]的歧义=] 在调用的命令中别名定义的代码和用户提供的代码之间。
不要为此使用别名;函数是更好的工具。
gra-bitbucket() { gra origin https://gismoranas@bitbucket.org/gismoranas"$@"; }
如果您的 shell 是(旧版本的)bash 而不是 zsh,您可能需要使用 function
关键字来定义名称中带有破折号的函数(这在 POSIX 规则下是不允许的)。因此:
# this version works with bash as well (but not POSIX sh)
function gra-bitbucket { gra origin https://gismoranas@bitbucket.org/gismoranas"$@"; }
...或者,如果您想符合任何 POSIX shell,请从名称中删除 -
(在这种情况下,替换为 _
):
# this version works with all POSIX shells
gra_bitbucket() { gra origin https://gismoranas@bitbucket.org/gismoranas"$@"; }
在所有这些情况下,用法(但 POSIX 形式中的名称更改除外)与您想要的别名的用法相同,如果该别名可能的话:
gra-bitbucket /some-repo.git
...将参考 https://gismoranas@bitbucket.org/gismoranas/some-repo.git
来源:https://blog.sebastian-daschner.com/entries/zsh-aliases
将以下内容放入您的 .zshrc:
# blank aliases
typeset -a baliases
baliases=()
balias() {
alias $@
args="$@"
args=${args%%\=*}
baliases+=(${args##* })
}
# ignored aliases
typeset -a ialiases
ialiases=()
ialias() {
alias $@
args="$@"
args=${args%%\=*}
ialiases+=(${args##* })
}
# functionality
expand-alias-space() {
[[ $LBUFFER =~ "\<(${(j:|:)baliases})$" ]]; insertBlank=$?
if [[ ! $LBUFFER =~ "\<(${(j:|:)ialiases})$" ]]; then
zle _expand_alias
fi
zle self-insert
if [[ "$insertBlank" = "0" ]]; then
zle backward-delete-char
fi
}
zle -N expand-alias-space
bindkey " " expand-alias-space
bindkey -M isearch " " magic-space
现在您可以:
# command aliases
alias jj='java -jar'
alias mcp='mvn clean package'
...
# blank aliases, without trailing whitespace
balias clh='curl localhost:'
...
# "ignored" aliases, not expanded
ialias l='exa -al'
ialias curl='curl --silent --show-error'
...
# global aliases
alias -g L='| less'
alias -g G='| grep'
ialias -g grep='grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}'
具体来说,对于你的问题,你需要上面定义的balias
函数:
balias gra-bitbucket="gra origin https://gismoranas@bitbucket.org/gismoranas"