Сколько способов можно получить завершение псевдонима Bash на частичной подстроке? - PullRequest
0 голосов
/ 04 февраля 2009

Вопрос: У меня есть вопрос, который , по-видимому, не отвечает на этот уже заданный вопрос о завершении 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}}, чтобы выполнить его.

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

Приветствуются ссылки на существующие веб-страницы или RTFM.

Ответы [ 3 ]

2 голосов
/ 05 февраля 2009

Если вы действительно хотите изменить поведение вкладки 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 # Letting Readline Type For You .

1 голос
/ 05 февраля 2009

Вы можете сгенерировать совпадения для указанной подстроки с помощью 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 выше.

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

1 голос
/ 04 февраля 2009

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

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

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

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

...