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

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

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

4 ответа

Решение

Чтобы сделать bashбез учета регистра для текущего пользователя:

Запустите следующий скрипт оболочки в терминале:

# If ~/.inputrc doesn't exist yet: First include the original /etc/inputrc
# so it won't get overriden
if [ ! -a ~/.inputrc ]; then echo 'source /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

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

Откройте терминал и введите следующую команду:

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

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

Если в некоторых случаях вы хотите удалить без учета регистра, просто отредактируйте файл /etc/inputrc, удалив set completion-ignore-case линия.

Это все.

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

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

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

Вы можете сделать это, установив конфигурационную переменную для 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

Чтобы применить изменения, перезапустите bash или перезагрузите inputrc, например, с помощью Ctrl + x, Ctrl + r.

Более подробную информацию о readline и inputrc можно найти в man bash а также man 3 readline,

Другие вопросы по тегам