Завершение ввода без учета регистра в Bash

142

Есть ли способ сделать вкладку Bash без учета регистра?

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
Copyright (C) 2007 Free Software Foundation, Inc.

Я использую Mac OS X 10.6

Джеффри Эйлсворт
источник

Ответы:

170

Обновите текст, /etc/inputrcчтобы включить

установить завершение-игнорирование на

Затем используйте ^X ^Rдля перезагрузки конфигурации.

Джон Т
источник
30
"также" - /etc/inputrcили ~/.inputrcфайл, обозначенный как INPUTRC- единственные места, куда он может пойти. Ввод этого в приглашении Bash не будет работать.
Деннис Уильямсон
упс! ты прав :)
Джон Т
10
^X ^Rперезагрузитьinputrc
grawity
14
@DennisWilliamson: вы можете сделать bind "set completion-ignore-case on"из командной строки; потому что, я полагаю, только эта терминальная сессия
Clay Bridges
1
Вот что есть в msysgit, но в MSYS2 не хватает! Здесь я пытался найти его, например, в / etc / profile ...
SamB
111

Перестройка с учетом ретроспективного взгляда, чтобы противопоставить плюсы и минусы использования [.]inputrcпротив .bash_profile.
Наконечник шляпы, чтобы подчеркнуть за его помощь.

Примечание: редактирование командной строки в Bash обеспечивается библиотекой Readline; настраивать его нетривиально, но стоит учиться; его функции включают возможность определения пользовательских сочетаний клавиш для вставки предопределенных фрагментов текста - см. Редактирование командной строки в Справочном руководстве Bash.

Для того, чтобы настойчиво сделать закладки завершение нечувствительно к регистру в Bash:


Вариант А: Если у вас уже есть:

  • /etc/inputrcфайл (применяется в масштабах всей системы, модификация требует sudo)
  • и / или ~/.inputrcфайл (пользовательский)

    и / или

вы планируете широко настраивать библиотеку readline и / или хотите сделать настройки эффективными и для скриптов, когда они вызывают read -e:

Добавить строку

set completion-ignore-case on

в любой файл, в зависимости от того, хотите ли вы, чтобы настройки были эффективными для всех пользователей или текущего пользователя (создайте файл, если необходимо).

Связанная команда, которая упрощает заполнение имен файлов и каталогов:

set show-all-if-ambiguous on

Это избавляет от необходимости дважды нажимать клавишу Tab, если найдено более одного совпадения.


Вариант Б: в качестве альтернативы вы можете добавить команды Readline в свой пользовательский ~/.bash_profileфайл в OS X (или ~/.bashrcв Linux), передав их в качестве единственного аргумента bindвстроенному :

bind "set completion-ignore-case on"
bind "set show-all-if-ambiguous on"

Обратите внимание, что bindкоманды в ~/.bash_profile/ ~/.bashrcимеют приоритет над эквивалентными командами в /etc/inputrcили ~/.inputrc.

Как указывалось выше, конфигурация Readline, определенная таким образом, не будет действовать в сценариях, которые вызывают read -eактивацию поддержки Readline для чтения пользовательского ввода.

mklement0
источник
10
покажи все-если-неоднозначно так приятно! Я часто удивлялся, почему они заставили меня дважды сделать это. тысячи нажатий клавиш сохранены в моем будущем! Спасибо!
user34112
4
Круто, это даже работает для cdкоманд. Это решит этот вопрос и сэкономит мне тысячи нажатий клавиш. :)
hoosierEE
1
Отличная точка зрения show-all-if-ambiguous. Однако, поскольку вы говорите «в качестве альтернативы», есть ли какая-то польза от этого bind, когда inputrcфайлы кажутся ненужными?
underscore_d
1
@underscore_d: Хороший вопрос; пожалуйста, смотрите мой обновленный ответ.
mklement0
1
Хорошо, спасибо! На Debian 8.2 у меня не было ни того inputrc, ни другого , но я с радостью создал ~/.inputrcи добавил их, а также другие действительно полезные директивы. Я предполагаю, что мы предполагаем, что все читатели знают, что /etc/inputrc влияет на других пользователей (если последний не отменяет затронутые настройки)? Просто пока мы упоминаем предостережения;)
underscore_d
1

Чтобы не изменять конфигурацию для всех пользователей и не получать root-права, используйте следующее:

if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi
echo 'set completion-ignore-case on' >> ~/.inputrc

Затем войдите в систему или перезагрузите ~ / .inputrc

Анкур Шарма
источник