zsh - 在调用结束时没有空格的别名

时间:2016-03-21 14:34:10

标签: shell alias zsh

我想要一个别名:

alias gra-bitbucket="gra origin https://gismoranas@bitbucket.org/gismoranas"

以便我可以像:

一样使用它
gra-bitbucket/some-repo.git

将新原点添加到git存储库(gra是oh-my-zsh!别名)。

我的问题是,我不想每次都要写整个网址。它一定不能是别名,但设置单线设置会很好。

2 个答案:

答案 0 :(得分:1)

请注意,这是针对原始问题编写的,它没有消除歧义是否指定了别名调用的“末尾没有空格”,或者别名定义的代码与用户提供的代码之间没有空格调用命令中的代码。

不要使用别名;功能是更好的工具。

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

答案 1 :(得分:1)

来源: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"