Я создал свою собственную функцию завершения bash. Я сделал несколько исправлений. Само завершение меня устраивает, но я нарушил авто пространство после коротких вариантов -a
, -p
, -h
Завершение Bash на коротких опциях
Значение, когда я печатаю editcfg -fil<TAB>
это autocompletes в editcfg -file
(пробел после -file
). Однако, если я наберу editcfg -p<TAB>
, он не будет автокосмически после -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
}
Что я пропустил?
Благодаря
Если вы '2' продолжить * * после добавления текущей опции к' u_opts' ли это исправить? 'Editcfg -file' добавить пробел? –
Добавление 'continue 2' не исправляет его. 'editcfg -file' также не заполняет его. Кажется, только когда предоставляется частичная опция. –