Примушуйте нормальне заповнення вкладки Bash, якщо не вдалося інтелектуальне завершення


10

Оскільки заповнення вкладок стало стандартною функцією в оболонках, я був дуже щасливим користувачем. Мені навіть подобається інтелектуальне завершення програми Bash (де він шукає лише PDF-файли, якщо я набираю evince foo <TAB>) - доки він правильно здогадається.

Це руйнує інакше щасливий день, коли Bash використовує своє розумне завершення, щоб відмовитися від завершення.

Сьогодні я хотів:

tar xvf centos5.8_x86_1.ova

Тому я ввійшов:

tar xvf cent<TAB>

а Bash відмовляється завершити шлях, тому що .ova-файли - це не те, що ви зазвичай використовуєте з tar.

Я знаю, що можу видалити пакет bash-завершення, щоб видалити інтелектуальне завершення. Але чи можу я мати свій торт і їсти його теж?

Чи можу я попросити Bash спочатку використати інтелектуальне завершення, а якщо це не вдасться, то використовувати неінтелектуальне завершення?


1
<spam> Zsh може це зробити. </spam>
Жил "ТАК - перестань бути злим"

Відповіді:


9

Далі слід увімкнути нормальне завершення bash після того, як всі "інтелектуальні" завершення не вдалися до програм tar, vim та emacs:

compopt -o bashdefault tar vim emacs

дивіться також відповідну сторінку в онлайн-посібнику з bash.

Caveat: ви отримуєте нормальну поведінку для типу завершення (команди / імена файлів / імена користувачів тощо), визначеного інтелектуальним завершенням для команди, наприклад, наприклад, завершення для serviceфайлів не буде завершеним, навіть якщо ви зателефонували complete -o bashdefault service.

У цьому та інших випадках, коли інтелектуальне автодоповнення не вдається, ви завжди можете натиснути Alt-/(або M-/в позначенні керівництва bash), щоб завершити імена файлів майже так само, як працює TAB, якщо інтелектуальне завершення вимкнено (майже так само в тому сенсі, що M-/не завершені візерунки, як *.txt). Тут див. Ключові послідовності для інших типів завершень, таких як команди та імена користувачів.


2
Дякую за Alt- / згадую, я не мав уявлення, що там
Майкл Шпір,

1

bash завершення - це розширення стандартного завершення bash і є самою програмою bash. Тож якщо ви хочете змінити, як діє програма, просто змініть її. Це безкоштовне програмне забезпечення, ви можете це робити. Для конкретного випадку tarкоманди, файл є /usr/share/bash-completion/completions/tar. Щоб tarавтоматично заповнити файл із розширенням ova, просто додайте його до рядка

local tars='@(@(tar|gem|spkg)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

так це каже

local tars='@(@(tar|gem|spkg|ova)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

Зауважте, що це шлях і код, який існує для Debian Wheezy (поточна стабільна версія). Інший дистрибутив або версія може мати інший код, але ідея така ж. Відкрийте код і налаштуйте його так, щоб він робив те, що ви хочете.

Змінити: Я просто зауважив , що питання про кожен раз, коли він не знаходить матч і не тільки конкретний випадок додавання ovaдо tar. Можливо, це все ще може бути корисним комусь, щоб знати, де вони можуть шукати джерело.


4
Змінення файлів в / usr, які належать менеджеру пакунків, є хорошим способом викликати неприємний шок від оновлення. Краще: замініть упаковану конфігурацію.
Кріс Даун

1
@ChrisDown і як би ти це зробив? Я все ще шукаю чисте рішення .bashrc.
Клейтон Стенлі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.