+ -
当前位置:首页 → 问答吧 → 定义了 alias 之后,无法使用 bash_complete 自动补全,为何?

定义了 alias 之后,无法使用 bash_complete 自动补全,为何?

时间:2010-06-27

来源:互联网

我在 .bashrc 里面定义了

代码:
148 alias pac="sudo pacman -S"·
149 alias pacs="pacman -Ss"
150 alias pq="pacman -Q"
151 alias pup="sudo pacman -Syu"
当时 pacman -Ss 时,使用 tab 可以自动补全,而使用 上面定义的别名 pacs 时确不能

再自动补全,这是怎么回事啊!

谢谢!!!

作者: 57lvii   发布时间: 2010-06-27

http://www.adam8157.info/blog/2010/0...as-completion/

作者: adaml   发布时间: 2010-06-27

谢谢 adaml 兄,但是你提供的是 apt 的相关选项,pacman 的还是搜寻中,谢谢!

作者: 57lvii   发布时间: 2010-06-27

引用:
作者: 57lvii
谢谢 adaml 兄,但是你提供的是 apt 的相关选项,pacman 的还是搜寻中,谢谢!
你去看bash-completition的脚本, 把pacman的提出来就是了...估计没有可以直接抄的

作者: adaml   发布时间: 2010-06-27

引用:
作者: 57lvii
我在 .bashrc 里面定义了

代码:
148 alias pac="sudo pacman -S"·
149 alias pacs="pacman -Ss"
150 alias pq="pacman -Q"
151 alias pup="sudo pacman -Syu"
当时 pacman -Ss 时,使用 tab 可以自动补全,而使用 上面定义的别名 pacs 时确不能

再自动补全,这是怎么回事啊!

谢谢!!!
在后面引号之前留一个空格试试看
代码:
alias pq='pacman -Q '

作者: Alerander   发布时间: 2010-06-27

引用:
作者: Alerander
在后面引号之前留一个空格试试看
代码:
alias pq='pacman -Q '
是啊,俺就是这么干的,从来没问题。楼主试试试看

作者: 糊涂   发布时间: 2010-06-27

代码:
在后面引号之前留一个空格试试看

alias pq='pacman -Q '
还是不行的!!!

难道我哪个地方,和你们不一样吗?

.bashrc 开头:

代码:
 1 if [ -f /etc/bash_completion ]; then
 2 | . /etc/bash_completion
 3 fi

作者: 57lvii   发布时间: 2010-06-28

嗯,我又看了一下,我这里没加空格的也可以补全。
我的alias是定义在$HOME/.profile文件中,然后 ln -s .profile .bashrc

比如,.profile中有这样一句:
alias sc='source'
执行时:
$ sc .pro<TAB>
即可补全为.profile

你试着把alias写到$HOME/.profile文件里,然后从新登录一下看。不确定是不是跟这个有关系。不同的登录模式使用不同的bash配置文件(所以为了统一起见我作了一个link而不是创建两个文件)。我这里,命令行登录使用.profile文件,终端窗口登录使用.bashrc文件。

extra中确实有个bash-completion,不过看了一下,我没装这个东西。也没做过什么特别的配置,好像自然就带补全功能了

作者: 糊涂   发布时间: 2010-06-28

另外楼主你再说明一下,你说的不能补全,是pacs这个别名命令本身不能补全,还是它后面带的文件名参数不能补全?
如果是前者,<TAB>一次不能补全的话,再<TAB>一次,会给出多个选择。比如你定义的pacs,由于系统里存在pacs、pacman等命令,你只敲pac再<TAB>是不会补全的。
我上面的解释针对后者。

$ pac #这里按两次<TAB>是下面结果
pacdiffviewer pack200 package-query packetforge-ng pacman pacman-color pacman-optimize pacs

作者: 糊涂   发布时间: 2010-06-28

引用:
作者: 糊涂
嗯,我又看了一下,我这里没加空格的也可以补全。
我的alias是定义在$HOME/.profile文件中,然后 ln -s .profile .bashrc

比如,.profile中有这样一句:
alias sc='source'
执行时:
$ sc .pro<TAB>
即可补全为.profile

你试着把alias写到$HOME/.profile文件里,然后从新登录一下看。不确定是不是跟这个有关系。不同的登录模式使用不同的bash配置文件(所以为了统一起见我作了一个link而不是创建两个文件)。我这里,命令行登录使用.profile文件,终端窗口登录使用.bashrc文件。

extra中确实有个bash-completion,不过看了一下,我没装这个东西。也没做过什么特别的配置,好像自然就带补全功能了

又不是补全文件名, 是补全包名...

作者: adaml   发布时间: 2010-06-28

不好意思,可能我没有表述清楚,我所指的是,补全 pacman 的安装包,还有像 man 相关程序

的补全,应该属于补全 参数吧,不是 文件名,默认 bash 就支持 文件名补全的 !

作者: 57lvii   发布时间: 2010-06-28

我白折腾半天

作者: 糊涂   发布时间: 2010-06-29