@electricface
2014-04-17T08:53:18.000000Z
字数 1294
阅读 1327
Bash下的补全是通过内置命令complete/compgen来实现的。
系统启动时搜索的补全脚本 /etc/bash_completion.d/
以可重用的格式打印现有的补全声明 complete -p
先用tab 键补全某个命令,比如 apt-get
complete -p | grep apt-get
结果是 complete -F _apt_get apt-get
type _apt_get
就能打印出补全函数了。
根据输入从Wordlist中得到补全列表
compgen -W 'This is COMP_WORDS' -- $cur
compgen 的选项说明
alias
builtin
env
complete根据内置变量生成补全列表的。写补全脚本时也要利用Bash的这些内置变量
在命令行输入的时候,${COMP_WORDS[COMP_CWORD]}
表示光标处的单词, ${COMP_WORDS[COMP_CWORD-1]}
表示前一些单词,补全就是根据光标所在单词的位置得到COMPREPLY
。
如 _ei_bin 函数,用于补全 eib 命令
_ei_bin (){
local cur=${COMP_WORDS[COMP_CWORD]}
bin_ls=`ls $HOME_UP/bin/`
COMPREPLY=( $( compgen -W "$bin_ls" -- "$cur" ) )
}
complete -F _ei_bin eib
再比如 _lang 函数
_lang (){
local cur=${COMP_WORDS[COMP_CWORD]}
case $COMP_CWORD in
1)
COMPREPLY=($(compgen -W 'zh_CN zh_TW zh_HK cs_CZ pt_BR en_US' -- "$cur"))
return;;
2)
COMPREPLY=($(compgen -f -c -- "$cur"))
return;;
esac
}
complete -F _lang lang
在 .bashrc 文件中写上 bind -f "/path/of/.inputrc"
#单击 tab 像vim一样的补全
TAB: menu-complete
# Ctrl + p 显示所有补全
"\C-p": possible-completions
set completion-query-items 50
set completion-ignore-case on
set completion-map-case on
set completion-prefix-display-length 2
set skip-completed-text on
set menu-complete-display-prefix on
有关readline 的配置说明,详细请 man bash
然后搜索 Readline Variables 。