如何使[TAB]与别名的参数一起使用以自动完成,如实际命令所示


9

我在.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

这是一个很好的问题。我喜欢它背后的想法。我一直在寻找,找到了一些接近的答案,但是当我尝试它们时,它们会失败。如果我提出一些建议,我会通知您。=)
Terrance

Answers:


6

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

但是,您需要apt-cache完成的一个子集,因此我们还有更多工作要做。

如果我们看一下在完成定义apt-cache-中/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文件中,则应该按预期运行补全。


0

我不知道bash,但是可以zsh和一些插件一起使用

用以下命令安装z-shell

sudo apt-get install zsh

并将z-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)

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明


嗯,仅当我完全按照您的方式操作时,它才对我有用,否则,它仅假定我正在运行cd并执行文件路径操作。我如何读取.bash_aliases文件?

我试图安装这些插件,但是我刚刚进行了antigen: command not found配置。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.