Як вивести рядкові завершення до stdout?


15

Деякі gitкоманди мають багато варіантів, і часто було б корисно шукати через них той, який мені потрібен - я просто шукав варіант, який керує TABшириною git-gui, але існує близько 200 доповнень для git config. Очевидним рішенням є копіювання всіх складових у редактор та пошук через них, але я б краще це зробив

[something] | grep tab

Немає manабо infoсторінок для compgen, help compgenнавіть не пояснює власні параметри, і немає автоматичного заповнення compgen(як це для іронії?).

PS: compgen -Aне працює.

PPS: Це не питання git-gui- рішення питання про ширину вкладок було в іншому місці.

PPPS: мова не йде про автоматичне виконання команд, а лише про параметри команд .


Це дуже схоже на Як передавати висновок "Вкладка завершена"? , але прийнята відповідь там була спеціально для виконання команд, а не аргументів
Michael Mrozek

Відповіді:


10

Ви можете використовувати таку функцію, яка використовує той самий спосіб sudoавтоматичного завершення створення списку завершень:

comp() {
    local COMP_LINE="$*"
    local COMP_WORDS=("$@")
    local COMP_CWORD=${#COMP_WORDS[@]}
    ((COMP_CWORD--))
    local COMP_POINT=${#COMP_LINE}
    local COMP_WORDBREAKS='"'"'><=;|&(:"
    # Don't really thing any real autocompletion script will rely on
    # the following 2 vars, but on principle they could ~~~  LOL.
    local COMP_TYPE=9
    local COMP_KEY=9
    _command_offset 0
    echo ${COMPREPLY[@]}
}
comp git config ''

де _command_offsetвизначено в bash-завершення (пакет).

ПРИМІТКА: функцію потрібно запустити в інтерактивній оболонці (тобто, якщо вона є у файлі, файл потрібно отримати замість просто запустити.) Або необхідні правила / функції завершення не будуть визначені.

PS. compgen -Aпрацює лише для вбудованих дій, те, що ви мали б спробувати (але не працює), є compgen -F(або насправді compgen -o bashdefault -o default -o nospace -F _git). Причина цього не працює (і doc для bash вбудованих команд, включаючи compgen / complete), можна знайти в bash (1) .


@ l0b0, сподіваємось, працює у всіх випадках.
yuyichao

Відмінно, це працює! Я зробив кілька незначних перетворень, і тепер це в моїх .bash_aliases назавжди. Ви можете захотіти обрізати, щоб залишилося лише рішення, але сумнівів у вас немає. Я видаляю свої коментарі з обговорення, оскільки вони вже не актуальні.
l0b0

1
Я виявив, що використання цього в інтерактивній оболонці може знищити вже заповнену вкладку. Здійснення локальної функції кожної з змінних вирішує цю проблему. (напр. local COMP_LINE="$*")
А. Л. Фланаган

@ALFlanagan Добре. Оновлено.
yuyichao
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.