bash – игнорировать регистр, но запретить автозаполнение, если двусмысленный

В последнее время я сталкиваюсь с неудобством при использовании автозапуска bash с игнорированием.

Предположим, у меня есть эти каталоги:

[xiaobai@xiaobai test]$ l total 20K 3407873 drwx------. 60 xiaobai xiaobai 4.0K May 25 17:17 ../ 3409017 drwxrwxr-x. 2 xiaobai xiaobai 4.0K May 25 17:35 hello/ 3681826 drwxrwxr-x. 2 xiaobai xiaobai 4.0K May 25 17:55 Hello_STACKOVERFLOW/ 3681837 drwxrwxr-x. 2 xiaobai xiaobai 4.0K May 25 17:55 Hello_StackOverflow/ 3412549 drwxrwxr-x. 5 xiaobai xiaobai 4.0K May 25 17:56 ./ [xiaobai@xiaobai test]$ 

затем cd h [Tab]:

 [xiaobai@xiaobai test]$ cd h #and press [Tab] hello/ Hello_StackOverflow/ Hello_STACKOVERFLOW/ [xiaobai@xiaobai test]$ cd hello #auto generate 

Вы заметите, что новое командное приглашение поставляется с автоматическим завершением «привет», в то время как существует альтернатива «Hello». Но здесь у меня нет проблем, потому что я могу либо вставить / ИЛИ нажать [Enter], чтобы войти внутрь hello /. Или я могу вставить подчеркивание _ и нажать [Tab], чтобы перейти далее. Hello_ *:

 [xiaobai@xiaobai test]$ cd hello_ #and press [Tab] Hello_StackOverflow/ Hello_STACKOVERFLOW/ [xiaobai@xiaobai test]$ cd Hello_StackOverflow #auto generate 

Теперь проблема становится очевидной, что, если моя цель была «Hello_STACKOVERFLOW /»? Я должен нажать Back Space, чтобы удалить «tackOverflow», а затем вставить T + [Tab] для достижения моей цели.

Я хочу:

 [xiaobai@xiaobai test]$ cd hello_ #and press [Tab] Hello_StackOverflow/ Hello_STACKOVERFLOW/ [xiaobai@xiaobai test]$ cd Hello_S #without 'tackOverflow', so i just have to type T+[Tab] without redundant erase step. 

Конечно, у него не было бы такой проблемы, если бы завершить-игнорировать-case в моем файле inputrc . Но мне нравится игнорировать случай, но избегайте автоматического завершения при двусмысленности. Можно ли это сделать?

One Solution collect form web for “bash – игнорировать регистр, но запретить автозаполнение, если двусмысленный”

Для вашей проблемы есть обходной путь.

Пытаться:

 bind 'set completion-ignore-case on' bind 'TAB:menu-complete' bind 'set menu-complete-display-prefix on' bind 'set show-all-if-ambiguous on' 

Тип cd h , Tab . Линия расширяется до cd hello .

Затем введите _ , Tab . Линия расширяется до cd Hello_StackOverflow

Нажмите Tab , Tab . Строка расширяется до cd Hello_STACKOVERFLOW/

Объяснение:

menu-complete Аналогично завершению, но заменяет слово, которое должно быть заполнено одним совпадением из списка возможных завершений. Повторное выполнение полных шагов меню через список возможных завершений, вставляя каждый матч по очереди. В конце списка завершений звонит звонок (при условии настройки колокола), и исходный текст восстанавливается. Эта команда предназначена для привязки к TAB, но по умолчанию она не привязана.

Доступно с bash-2.02-alpha1

menu-complete-display-prefix Если установлено значение «Вкл.», при завершении меню отображается общий префикс списка возможных завершений (который может быть пустым) перед циклическим переходом по списку.

Доступно с bash-4.2-alpha

show-all-if-ambiguous Это изменяет поведение функций завершения по умолчанию. Если установлено значение Вкл., Слова, которые имеют более одного возможного завершения, приводят к немедленному перечислению совпадений, а не звонку колокола.

Работайте вместе с menu-complete-display-prefix с bash-4.3-alpha

Linux и Unix - лучшая ОС в мире.