如何让 [TAB] 与别名参数一起使用以自动完成,就像使用实际命令一样

如何让 [TAB] 与别名参数一起使用以自动完成,就像使用实际命令一样

我在我的.bash_aliases文件中创建了许多别名,它们非常有用,所以如果我想要某个包的所有信息,我会执行以下操作:

allinfo software-center

这相当于:

apt-cache show software-center

由于别名设置为:

alias allinfo='apt-cache show'

但是这样做有一个缺点,目前我无法TAB在使用时自动完成allinfo而不是实际命令。所以我想知道是否有办法克服这个缺点,并使它的工作方式allinfo software-ce[TAB]与使用实际命令时一样,而不仅仅是占用较大的制表符空间?

我在用gnome-terminal


操作系统信息:

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:    15.04
Codename:   vivid

封装信息:

gnome-terminal:
  Installed: 3.14.2-0ubuntu3
  Candidate: 3.14.2-0ubuntu3
  Version table:
 *** 3.14.2-0ubuntu3 0
        500 http://gb.archive.ubuntu.com/ubuntu/ vivid/main amd64 Packages
        100 /var/lib/dpkg/status

答案1

好问题!如果您的allinfo命令与 相同apt-cache(即没有show),那么我们可以查看 的补全apt-cache,并将其应用于您的allinfo别名。

但是,您想要完成的一部分apt-cache,因此我们还需要做一些工作。

如果我们查看apt-cache- in的完成定义/usr/share/bash-completion/completions/apt-cache,我们会看到以下内容用于show子命令:

        COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" 2> /dev/null ) )

- 这只是将COMPREPLY变量设置为匹配的包列表。

因此,我们可以借用这个并编写我们自己的函数,并将其绑定到您的 allinfo 别名:

# define a function to print the possible completions for
# an allinfo invocation
_allinfo()
{
    _init_completion || return
    COMPREPLY=($(apt-cache --no-generate pkgnames "$cur" 2>/dev/null))
    return 0
}

# bind the above completion function to the 'allinfo' alias
complete -F _allinfo allinfo

如果您将该片段添加到您的.bashrc文件中,您应该能够获得预期的完成效果。

答案2

我不知道bash,但它适用于zsh一些插件

使用以下方式安装 z-shell

sudo apt-get install zsh

并将 z-shell 设置为标准 shell

sudo chsh "$USER" -s $(which zsh)

并启动一个新终端来使用 z-shell

添加抗原v1

cd
git clone https://github.com/zsh-users/antigen.git

并配置

# path to antigen clone
source ~/antigen/antigen.zsh

# Load the oh-my-zsh's library.
antigen use oh-my-zsh

# Bundles from the default repo (robbyrussell's oh-my-zsh).
antigen bundle git
antigen bundle heroku
antigen bundle pip
antigen bundle lein
antigen bundle command-not-found
antigen bundle zsh-users/zsh-completions src

# Syntax highlighting bundle.
antigen bundle zsh-users/zsh-syntax-highlighting

# Load the theme.
antigen theme robbyrussell
# antigen bundle nojhan/liquidprompt

# Tell antigen that you're done.
antigen apply

一些图像(提示是 nojhan/liquidprompt)

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

相关内容