Сколькими способами я могу получить завершение псевдонима Bash для частичной подстроки?
-
21-08-2019 - |
Вопрос
Вопрос: У меня есть вопрос, который заключается в следующем по-видимому, на этот уже заданный вопрос о завершении 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?)