Как я могу получить завершение работы zsh в середине имени файла?

Это работает

Обычно завершение вкладок zsh хорошо.

 $ touch foo-1-bar foo-2-bar $ touch f<Tab> $ touch foo--bar ^ cursor here 

Повторное нажатие Tab вызывает меню, из которого я могу выбрать файлы.

 $ touch foo--bar foo-1-bar foo-2-bar 

Это не

Однако, похоже, это не работает со строками, где начинается и заканчивается матч. Например:

 touch foo-bar foo-foo-bar touch f<Tab> touch foo-bar ^ cursor here. <tab> again. touch foo-bar ^ cursor here. 

Меню не отображается, и нет возможности выбрать foo-foo-bar . Это ожидаемое поведение или ошибка? Есть ли параметр, чтобы меню появилось в последнем сценарии?

Я использую oh-my-zsh . Я попытался удалить все связанные с завершением строки из ~/.zshrc , но это не имело значения.

В соответствии с комментариями я попытался отключить oh-my-zsh , который исправил эту проблему. Затем я прошел через источник oh-my-zsh , выборочно отключив модули.

Я ранее имел CASE_SENSITIVE="true" , но комментируя эту строку, я исправил это для меня. По-видимому, это известная ошибка .

Чтобы исправить это, я мог бы поместить следующую строку в ~/.zshrc после поиска oh-my-zsh .

 zstyle ':completion:*' matcher-list 'r:|=*' 'l:|=* r:|=*' 

Лично я предпочитаю это решение гораздо больше – http://zsh.sourceforge.net/FAQ/zshfaq04.html#l50 , он работает как завершение в tcsh и завершает слова, которые находятся только перед курсором.

Просто используйте

  bindkey '^I' expand-or-complete-prefix 

вместо

  bindkey '^I' expand-or-complete 

(Это по умолчанию).