分页: 1 / 1

让alias命令在bash下支持补全.....(转自己的帖子)

发表于 : 2009-10-08 21:01
adam8157
一直都羡慕zsh的complete_aliases功能...

例如
ai='sudo apt-get install'
ap='sudo apt-get purge'
aw='apt-cache show'
输入ai或者aw, 然后按TAB键就可以补全软件包的名字
输入aw, 然后按TAB键就可以补全已经安装的软件包的名字

可惜bash没有,bash_completion也没有....只好自己写规则了,好在只有十几行...
在./.bashrc中加入以下内容...
代码:

代码: 全选

alias ai='sudo apt-get install'
alias ap='sudo apt-get purge'
alias aw='apt-cache show'
_show_installed()
{
        local cur
        COMPREPLY=()
        cur=`_get_cword`
        COMPREPLY=( $( _comp_dpkg_installed_packages $cur ) )
        return 0
}
_show_all()
{
        local cur
        COMPREPLY=()
        cur=`_get_cword`
        COMPREPLY=( $( apt-cache pkgnames $cur 2> /dev/null ) )
        return 0
}
complete -F _show_all $default aw
complete -F _show_all $default ai
complete -F _show_installed $default ap
以上是根据/etc/bash_completion写的,如果你有别的需要补全的alias,只需要查看相应命令在其中的规则写法就是了,目前我需要的就是上面的安装的和全部的软件包名....

Re: 让alias命令在bash下支持补全.....(转自己的帖子)

发表于 : 2009-10-08 21:04
eexpress
:em11 :em11 :em11


complete -F _show_all $default aw ai as
complete -F _show_installed $default ap ar

Re: 让alias命令在bash下支持补全.....(转自己的帖子)

发表于 : 2009-10-08 21:05
adam8157
eexpress 写了::em11 :em11 :em11
谢谢 嘿嘿....

Re: 让alias命令在bash下支持补全.....(转自己的帖子)

发表于 : 2009-10-09 9:00
c\nc
加个 arch 版的服务控制脚本(并不依赖 bash-completion):

代码: 全选

sc()
{
	sudo /etc/rc.d/$1 $2
}
_sc()
{
	COMPREPLY=()
	cur=${COMP_WORDS[COMP_CWORD]}
	prev=${COMP_WORDS[COMP_CWORD-1]}

	srvd=/etc/rc.d; daemons=/var/run/daemons
	case $COMP_CWORD in
		1)
			COMPREPLY=( $(compgen -W "$(
				cd $srvd
				for f in *; do [ -f $f ] && echo $f; done
			)" -- $cur) )
			;;
		2)
			w="start restart"
			test -f $daemons/$prev && w="stop restart"
			COMPREPLY=( $(compgen -W "$w" -- $cur) )
			;;
		*)
			;;
	esac
}
complete -F _sc sc