Можно ли в bash завершить середину слова?

279
dstarh

У меня есть простой скрипт завершения bash для моего пользовательского средства поиска веток git.

#/usr/bin/env bash _branch_completions() { local word="$"; if [ ! -z "$word" ] then COMPREPLY=($(compgen -W "`git branch | grep $word`" "$")) fi }  complete -F _branch_completions branch 

Скрипт "ветвь" ищет в ветвях, поэтому я могу искать

branch 5.9 

и я получу

1 release/5.9.0 2 hotfix/5.9.1 3 hotfix/5.9.2 Please select a branch 

Мой скрипт завершения bash завершит tabtab выпуск ветки и даст мне release / 5.9.0, но я бы хотел иметь возможность сделать ветку 5.9 tabtabи получить их все

0

1 ответ на вопрос

3
DMN

Со страницы руководства bash :

compgen [option] [word] ... If word is specified, only those completions matching word will be displayed. 

Вы уже фильтруете список с помощью grep, поэтому, чтобы получить желаемое поведение, вы можете просто пропустить второй аргумент compgen, создав свою строку:

COMPREPLY=($(compgen -W "`git branch | grep $word`")) 
Это сработало, но после его использования это не так здорово: \ если слово «разработка» находится ближе к концу имени ветви, я не могу найти его для выбора, без возврата и повторного ввода dstarh 5 лет назад 0