Zsh的补全跟通配符

sh/bash/dash/ksh/zsh等Shell脚本
回复
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Zsh的补全跟通配符

#1

帖子 tusooa » 2010-07-18 9:06

其实很多命令都可以自动补全。
如果是自己写的命令呢?
比如说ac-归档.bash,ae-解压.bash
让它补全参数,像这样:

代码: 全选

tlcr: 0 庚寅年六月初七日 08:42:56  ~
>> pacman -
 -- option --
-Q  -- Query the package database
-R  -- Remove a package from the system
-S  -- Synchronize packages
-U  -- Upgrade a package
-V  -- Display version and exit
-h  -- Display usage
(compctl貌似只能补全字词,没有这个说明)
man没讲明白

Zsh底下通配符没用(不是文件名)

代码: 全选

tlcr: 0 庚寅年六月初七日 08:42:29  ~
>> pacman -Si bash*
zsh: no matches found: bash*
tlcr: 1 庚寅年六月初七日 08:42:43  ~
>> pacman -Si bash
 -- packages --
bash                        bashdb                    
bashburn                    bashrun                   
bash-completion             bash-xyne-common_functions
要的效果是pacman -Si bash* == pacman -Si bash bashburn bash-completion bashdb bashrun bash-xyne-common_functions (把底下显示的东东全部补全)

代码: 全选

] ls -ld //
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: Zsh的补全跟通配符

#2

帖子 tusooa » 2010-07-18 15:39

补全解决了:

代码: 全选

_ds-打印脚本.bash()
{
    find "$HOME/应用/脚本" -name '??-*.*' | \
    while read line ; do
        reply=("${reply[@]}" "${line#$HOME/应用/脚本/}")
    done
}
compctl -K _ds-打印脚本.bash ds-打印脚本.bash

代码: 全选

tlcr: 0 庚寅年六月初七日 15:47:49  ~
>> ds-打印脚本.bash [tab]
ab-地址本.perl       ds-打印脚本.bash     td-待办事项.bash   
ac-归档.bash         ea-记账.perl         tm-托盘菜单.perl   
ae-解压.bash         lc-农历.py           wg-天气.perl       
dm-下载Fc杂志.bash   sd-截图.bash         游戏/sn-贪吃蛇.bash

代码: 全选

] ls -ld //
回复