Сколькими способами я могу получить завершение псевдонима Bash для частичной подстроки?

StackOverflow https://stackoverflow.com/questions/509427

Вопрос

Вопрос: У меня есть вопрос, который заключается в следующем по-видимому, на этот уже заданный вопрос о завершении Bash нет ответа о переполнении стека.Вопрос в том, как получить завершение псевдонима Bash (для любого псевдонима) для частичной подстроки.

Пример: Например, предположим, что у меня есть следующие псевдонимы:

open.alicehome="cd /usr/home/alice"
open.bakerhome="cd /usr/home/baker"
open.charliehome="cd /usr/home/charlie"
gohomenow="shutdown -now"

Я хотел бы лениво просто ввести "baker{{TAB}}", чтобы вызвать второй псевдоним.

Я хотел бы лениво просто ввести "home{{TAB}}", чтобы получить список всех вышеупомянутых псевдонимов, которые я затем могу выбрать с помощью клавиатуры (оптимально) или выбрать, введя однозначную подстроку, которая различает один из трех вариантов (менее оптимальный).

..или..

Я хотел бы лениво просто ввести "home", а затем несколько раз нажимать {{TAB}}, пока не появится конкретный псевдоним, который я хочу, затем нажмите {{ENTER}}, чтобы выполнить его.

Не стесняйтесь проявлять творческий подход: Если у вас есть способ сделать это, даже если для этого потребуется прибегнуть к крайнему гуру-хакерству, пожалуйста, не стесняйтесь поделиться им и не стесняйтесь объяснить свое гуру-хакерство до уровня пятилетнего ребенка, которому придется самому пытаться реализовать вашу идею.

Ссылки на существующие веб-страницы или RTFMS приветствуются.

Это было полезно?

Решение

Вы можете сгенерировать совпадения для указанной подстроки с помощью compgen -c -X'!*substring*'

Чтобы включить это в автозаполнение bash, вы можете создать файл .bash_completion в своем домашнем каталоге, содержащий что-то вроде этого:

_comp() {
    local cur

    cur=${COMP_WORDS[$COMP_CWORD]}

    COMPREPLY=( $( compgen -c -X '!*'$cur'*' ) )

}
complete -F _comp $nospace eval

Эта функция сопоставления запустится, когда вы нажмете <TAB> о доводах в пользу eval команда.Я не нашел способа включить новую функцию сопоставления для первого поиска команды в bash, я нашел только документацию о том, как добавить пользовательские дополнения для конкретной команды, например eval выше.

Но я немного скептически отношусь к тому, насколько это полезно...Нет простого способа выбрать из списка нужное вам соответствие.

Другие советы

Если ты действительно хочешь измениться bashповедение вкладки,

# ~/.inputrc
# The default binding for [Tab] is ``complete'', which is what we're used to.
# ``menu-complete'' gives you irssi-like behavior: cycle through completions.
"\t": menu-complete

Это задокументировано в Библиотека GNU Readline # Позволяет вводить Readline За вас.

Вероятно, вы можете достичь желаемого с помощью пользовательских настроек bash_completion, но я не собираюсь делать эту работу за вас, хорошо?:-)

Если вы не понимаете, о чем я говорю, смотрите здесь и здесь за подробностями.Кстати, меня бы это очень раздражало

Я хотел бы просто лениво ввести "home", а затем несколько раз нажать {{TAB}}, пока не появится конкретный псевдоним, который я хочу, затем нажмите {{ENTER}}, чтобы выполнить его.

который, я думаю, является стилем M $ "завершения" (вы переходите на среду DOS / Windows?)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top