【发布时间】:2015-03-12 16:29:42
【问题描述】:
我创建了自己的 bash 完成函数。我做了几次编辑。完成本身适合我,但我在短选项-a、-p、-h 之后打破了自动空间。
意思是,当我输入editcfg -filTAB 时,它会自动完成到editcfg -file (-file 后面的空格)。
但是,如果我键入 editcfg -pTAB,它不会在 -p 之后自动空格。
功能:
_editcfg ()
{
local cur prev opts presets u_opts;
COMPREPLY=();
cur="${COMP_WORDS[COMP_CWORD]}";
prev="${COMP_WORDS[COMP_CWORD-1]}";
opts=("-n" "-p" "-file" "-a" "-verbose" "-version" "-h");
presets=("default" "empty");
u_opts=();
for i in "${opts[@]}";
do
for j in "${COMP_WORDS[@]}";
do
if [[ "$i" == "$j" ]]; then
continue 2;
fi;
done;
u_opts+=("$i");
done;
case ${prev} in
-p)
COMPREPLY=($(compgen -W "${presets[*]}" -- ${cur}));
return 0
;;
-file)
COMPREPLY=($(compgen -fd -- ${cur} 2>/dev/null));
return 0
;;
-h | -version)
u_opts=();
return 0
;;
esac;
COMPREPLY=($(compgen -W "${u_opts[*]}" -- ${cur}));
return 0
}
我错过了什么?
谢谢
【问题讨论】:
-
如果您在
continue 2之后 将当前选项添加到u_opts是否可以解决问题?editcfg -file<TAB>加空格吗? -
添加
continue 2并不能解决问题。editcfg -file<TAB>也没有完成。似乎仅在给出部分选项时。
标签: bash bash-completion