4

Я давно пользуюсь tcsh, но все крутые ребята в наше время, похоже, используют либо bash, либо zsh (то есть шаблоны завершения для git или что-то еще доступны для bash и zsh, редко для tcsh).

Моя проблема в том, что в обеих оболочках есть поведения, связанные с завершением пути путями, которые сводят меня с ума, и у меня много проблем с поиском, как изменить их по своему вкусу.

Вот пара примеров того, что я привык делать в tcsh, что другие делают по-другому:

  • /u<TAB> завершается до /usr/
  • Затем вкладка перечисляет содержимое /usr/
  • /usr/li<TAB> завершает работу с /usr/lib и перечисляет lib/ и libexec/
  • Повторное нажатие клавиши tab завершает работу с /usr/lib/
  • При третьем нажатии на вкладку выводится содержимое /usr/lib/

В bash, независимо от того, сколько раз я нажимаю на tab, он никогда не пройдет мимо /usr/lib , что потребует от меня ввода косой черты, чего я не хочу делать.

В zsh /usr/li<TAB> сначала завершается в /usr/lib , затем в другой вкладке перечисляются lib/ и libexec/ , третья вкладка завершается в /usr/lib/ , а все последующие вкладки переключаются между /usr/lib/ и /usr/libexec/ . Я понятия не имею, как пройти этот пункт. Я просто хочу перейти из /usr/li в /usr/lib , затем /usr/lib/ , а затем перечислить его содержимое.

То же самое касается питона. В tcsh я pyt<TAB> , он завершается до python и перечисляет python , python2.5 , python2.6 и т.д., А затем вторая вкладка устанавливает для python и добавляет пробел. В bash требуется, чтобы я напечатал пробел, а в zsh он бесконечно циклически повторяется, как в первом примере.

Любая помощь в укрощении этих оболочек будет принята с благодарностью. Я не хочу тратить время на настройку других аспектов этих оболочек, пока не решу проблему, описанную выше.

2 ответа2

2

Хорошо сделано для точного описания ваших требований, но я не уверен, что на самом деле понимаю, что вы хотите сделать, если есть двусмысленность, например, после /usr/lib , что вы ожидаете от клавиши Tab .

Если я попробую tcsh, после /usr/lib , клавиша Tab только перечисляет lib и libexec . Вы можете воспроизвести этот эффект в zsh с помощью setopt no_auto_menu , но это может изменить поведение, которое вам не понравится в других случаях. Если вы также выполните setopt rec_exact , поведение будет похоже на то, что вы описываете: после /usr/li вкладка Tab вставляет b , затем другая вкладка Tab вставляет / , а третья перечисляет завершения в /usr/lib/ .

Опции завершения zsh описаны в разделе «Завершение» в man zshoptions.

1

Для bash: в вашем ~/.inputrc положите:

set show-all-if-unmodified  on

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .