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