Как избежать повторного завершения в Bash

Да, grepможет сделать что-то подобное :его опция -Cпокажет контекст совпадения. Таким образом

git help | grep -C2 merge

покажет строки, содержащие «слияние», с двумя строками контекста выше и ниже.

Мне удобнее использоватьless:

git help | less

, затем выполните поиск с помощью / .

git help

мало что вам скажет, вам понадобится

git help merge

, который откроет для вас соответствующую справочную страницу.

Некоторые эмуляторы терминала также позволяют выполнять поиск постфактум; например, терминал GNOME имеет меню поиска, и вы можете нажать CtrlShiftF , чтобы начать поиск.

1
08.05.2021, 13:50
1 ответ

То, что вы видите, является предполагаемым поведением при использовании базового механизма завершения complete -W.

Если вам нужно более интеллектуальное завершение, вам нужно написать функции завершения (см. раздел «Программируемое завершение» в руководстве по Bash)и использовать complete -F.

Вот как адаптировать ваш пример:

$ comp_d() {
    COMPREPLY=( $(
        if [ "$COMP_CWORD" -eq 1 ]; then
            compgen -W "exempt limit show update" "$2"
        fi
    ) )
}

$ complete -F comp_d d

Такие функции должны возвращать кандидатов на завершение в виде массива COMPREPLY. Я использую ваш список слов только тогда, когда пользователь завершает первый аргумент(COMP_CWORDравным 1 ), иначе массив остается пустым.

1
28.07.2021, 11:34

Теги

Похожие вопросы