Как получить эквивалент расширенного завершения tcsh в bash?

В tcsh manpage эффекты set complete = enhance определяются следующим образом:

[…] завершение 1) игнорирует регистр и 2) считает периоды, дефисы и символы подчеркивания ('.', '-' и '_') разделителями слов, а дефисы и подчеркивания эквивалентными.

Что касается 1), я знаю, что readline может быть сконфигурирован так, чтобы игнорировать регистр через set completion-ignore-case on . Поэтому мой вопрос касается только 2).

Например, если у меня есть каталог, содержащий несколько файлов с похожими базовыми именами, но с разными расширениями:

 $ ls file0.dat file1.dat file2.dat files.sh 

то я хочу, чтобы оболочка имела возможность завершить расширение файла:

 $ cat .sh<TAB> $ cat files.sh 

Есть ли способ достичь или, по крайней мере, подражать этому поведению в bash ?

РЕДАКТИРОВАТЬ

Следуя первым ответам, здесь приведены другие примеры, которые более точно показывают, как работает функция tcsh :

 $ ls abc.foo abc.bar cab.foo cab.bar $ cat af<TAB> $ cat abc.foo 

или:

 $ cat .b<TAB> abc.bar cab.bar $ cat .bar 

Фактически, tcsh завершает как базовое имя, так и расширение. Предложенное здесь поведение – это перечисление возможностей, если несколько, как обычно, с завершением TAB, чтобы не вставлять их все.

  • Как включить табуляцию подстановочных знаков в bash?
  • удалить хост из списка завершения для ssh в zsh
  • Динамически обновлять список завершений в zsh
  • Отключить печать всех возможностей в tcsh на TAB
  • Использовать все хосты, завершенные zsh для cssh
  • zsh, развернуть * до (a | b | c)
  • Терминал не является источником .zshrc с пользовательскими цветами для команд ls и cd
  • Как работает автозаполнение Bash?
  • One Solution collect form web for “Как получить эквивалент расширенного завершения tcsh в bash?”

    Это не совсем то, что вам нужно, но близко. Комбинация клавиш Ctrl + x , g ( Cx g в emacsspeak) будет содержать список расширений глобуса. Итак, в вашем примере:

     $ cat *.b*<Ctrl><x><g> abc.bar cab.bar 

    Итак, в отличие от того, что вы описываете для tcsh , для этого нужен действительный glob. Другими словами, это эквивалентно

     $ echo *.b* 

    Обратите внимание, что ярлык нажимает Ctrl и x вместе, затем отпускает их и нажимает g .

    Это описано в man bash :

      glob-list-expansions (Cx g) The list of expansions that would have been generated by glob-expand-word is displayed, and the line is redrawn. If a numeric argument is supplied, an asterisk is appended before pathname expansion. 
    Interesting Posts

    Сценарий Bash не может распознавать переменную как часть пути

    Как я могу использовать Mint Live DVD с отдельным постоянным хранилищем настроек на USB-накопителе?

    Автоматическое выполнение команд при открытии терминала

    Почему печать работает с awk, но с эхом нет?

    Как получить дамп http на веб-сайте и заголовке как из одной команды curl?

    Как отправить вывод команды unix с одного сервера на другой?

    Измените адрес прослушивания на IPv4 с IPv6

    как сравнить десятичное значение с целым числом в сценариях оболочки?

    Ошибка: диск lvmid / … не найден. Ввод аварийного режима

    ping не получает пакетов, но tcpdump может видеть, как они попадают

    Как получить имя Диспетчера отображения в Linux?

    umount занятое устройство без процесса убийства?

    После отправки команды завершения сеанс ssh не завершается

    vim и tmux противоречат друг другу. Как я могу это исправить?

    Расширение размера диска на pfsense под VMWare ESXi

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