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

144

Терминал Ubuntu использует автозаполнение с учетом регистра, как я полагаю, было бы ожидаемо для Linux.

Но я думаю, что часто было бы удобнее использовать вместо этого регистр без учета регистра, чтобы избавить вас от необходимости быть точным при вводе имени и, вероятно, стоило бы дополнительных ложных срабатываний. Можно ли изменить это поведение?

mwfearnley
источник
Очень хороший вопрос Как инструмент удобства использования, завершение табуляции не должно быть таким строгим, как компьютерная система в целом, когда дело доходит до именования вещей.
masterxilo

Ответы:

170

Чтобы сделать 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 по одному варианту за раз или по одному 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строку.

Вот и все.

emtin4
источник
Хорошо, я уточнил это для вас. Требуется некоторое время, чтобы узнать о bash, но продолжайте изучать, читать и спрашивать. linuxcommand.org - популярное начало;)
Panther
3
Если существует более одного пользователя, это меняет его для всех, что может или не может быть желаемым поведением
Уолтер Тросс
2
безусловно, самый прямой и упрощенный ответ здесь
workabyte
простой и понятный ответ
Developerium
12

Я знаю, что этот вопрос очень старый, но если я что-то упустил, думаю, у меня есть супер простое решение, если вы используете bash.

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

Или просто добавьте строку, используя ваш любимый текстовый редактор. Перезапустите сеанс bash и наслаждайтесь.

Init3
источник
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, чтобы включить его для всех пользователей. Это файл инициализации для readline.

Но обратите внимание, что если вы создадите ~/.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.

mwfearnley
источник