Чи можу я зробити так, щоб Tab не залежав від регістру в Bash?


144

Термінал Ubuntu використовує автоматичне завершення з урахуванням регістру, як, напевно, можна очікувати для Linux.

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


Дуже гарне запитання. Як інструмент зручності користування, завершення вкладки не повинно бути таким строгим, як комп'ютерна система в цілому, коли справа стосується іменування речей.
masterxilo

Відповіді:


169

Щоб зробити bashнечутливим до регістру для поточного користувача:

Запустіть наступний скрипт оболонки в терміналі:

# If ~/.inputrc doesn't exist yet: First include the original /etc/inputrc
# so it won't get overriden
if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi

# Add shell-option to ~/.inputrc to enable case-insensitive tab completion
echo 'set completion-ignore-case On' >> ~/.inputrc

Запустіть нову оболонку (знову відкрийте термінал).

Щоб внести зміни в систему:

# add option to /etc/inputrc to enable case-insensitive tab completion for all users
echo 'set completion-ignore-case On' >> /etc/inputrc
# you may have to use this instead if you are not a superuser:
echo 'set completion-ignore-case On' | sudo tee -a /etc/inputrc

Детальніше див man bash. Так, це довга сторінка, але bash - це дещо складна програма, і якщо ви хочете просто пошукати цю сторінку на "нечутливій до регістру", перейдіть до відповідного розділу. Зазвичай люди вивчають баш один варіант за один раз або один скрипт bash за один раз, і для того, щоб освоїти всі нюанси, потрібно багато часу. Ваш інтерес може відрізнятися.


Дякую. Я вдячний специфічним для користувачів рішенням, яке не стосується адміністратора. Лінія відлуння, здається, спрацювала, але тепер я, здається, втратив здатність використовувати Ctrl-Left / Right для переміщення курсору. Також було >>б безпечніше >?
mwfearnley

Взагалі >> буде безпечніше, моя помилка, я припускав, що у вас немає ~ / .inputrc. Я також встановлюю noclobber =) Трохи переконайтесь, чому ваші клавіші зі стрілками не працюють, я не можу це повторити. Ви можете видалити ~ / .inputrc та запустити нову оболонку.
Пантера

Так, він знову працює, якщо його видалити .. Відповідно до linuxfromscratch.org/blfs/view/5.1/postlfs/inputrc.html, новий inputrc може бути перекриттям глобального?
mwfearnley

2
Боже, я скопіював це в / etc / inputrc і більше не можу набрати "i", і коли я набираю "e", він просто спамує "ssssssssss [..]" в консоль. Краще скористайтеся рішенням від @ emtin4
Лука Стіб

2
@LucaSteeb Я теж натиснув це, але потім зрозумів, що весь цей блок не повинен бути поміщений у ваш .inputrc, а набраний один раз. Тільки $include /etc/inputrcі set completion-ignore-case onмає бути у вашому файлі ~ ..inputrc.
Кріс

49

Відкрийте термінал і введіть команду нижче:

echo set completion-ignore-case on | sudo tee -a /etc/inputrc

Введіть пароль. Перезапустити термінал.

Якщо в деяких випадках ви хочете видалити нечутливі регістри, просто відредагуйте / etc / inputrc файл, видаливши set completion-ignore-caseрядок.

Це все.


Добре, я уточнив це для вас. Щоб дізнатися про баш, потрібно трохи часу, але продовжуйте вивчати, читати та питати. linuxcommand.org - популярний старт;)
Panther

3
Якщо користувачів більше, ніж один, це змінює його для всіх, що може бути, а може і не бути бажаною поведінкою
Walter Tross,

2
на сьогоднішній день найпростіша відповідь і спрощена відповідь
трубайт

проста і зрозуміла відповідь
Developerium

11

Я знаю, що це питання дуже старе, але якщо я щось не пропускаю, я думаю, що у мене є дуже просте рішення, якщо ви використовуєте bash.

echo "bind 'set completion-ignore-case on'" >> ~/.bashrc

Або просто додайте рядок за допомогою улюбленого текстового редактора. Перезапустіть баш-сеанс і насолоджуйтесь.


2
Що ж, вам щось не вистачає: ~/.inputrcчитається по лінії readline, саме це використовує bash для забезпечення цього завершення. Readline також використовується іншими програмами, тому для загального встановлення цього, ~/.inputrcяк було запропоновано, було б краще прийняти відповідь .
муру

Дякую за вашу пропозицію, це вчить мене трохи більше, але я мушу сказати, що це не здається простішим, ніж той, який я прийняв, який просто використовує додатковий рядок, щоб новий файл не зводив нанівець старий.
mwfearnley

досконалий. ну єдине, що потрібно пам’ятати, - це bind 'set completion-ignore-case on'перейти у новий рядок.bashrc
Вішран

3

Це можна зробити, встановивши конфігураційну змінну для GNU readline, яка обробляє вхід в інтерактивній оболонці.

Необхідна змінна є completion-ignore-caseі може бути встановлена ​​безпосередньо у вашому сеансі bash за допомогою:

bind "set completion-ignore-case on"

Його можна ввімкнути для всіх майбутніх сеансів bash, помістивши його у ~/.inputrcфайл користувача чи систему /etc/inputrc, щоб увімкнути його для всіх користувачів. Це файл ініціалізації для рядка читання.

Але зауважте, що якщо ви створюєте ~/.inputrc, це скасує копію системи . (Для мене це призвело до втрати деяких ключових відображень, таких як Ctrl-Left/ Right. Ви можете бачити, які саме, переглядаючи /etc/inputrcфайл.)
Спосіб виправити цю проблему полягає в тому, щоб розмістити рядок $include /etc/inputrcу верхній частині ~/.inputrc, наприклад:

$include /etc/inputrc

set completion-ignore-case on

Щоб застосувати зміни, перезавантажте Баш або перезавантажити INPUTRC , наприклад , з Ctrl+x, Ctrl+r.

Більше інформації про readline та inputrc можна знайти в man bashта man 3 readline.

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