2

Контекст для тех, кто знает о завершении zsh, но не обо всех его возможностях. Одна из уникальных и действительно полезных функций zsh заключается в следующем:

[/usr/dir1/dir2/dir3/]$ cd dir1 dirnew
/usr/dirnew/dir2/dir3
[/usr/dirnew/dir2/dir3]$ 

т.е. если пользователь может заменить определенный каталог в иерархии другим. Это очень удобная функция. (при условии, что у dirnew есть dir2/dir3). Если у dirnew не было dir2/dir3, эта команда не будет выполнена.

Интересно, как я могу завершить CD, хотя, для длинных имен каталогов. Когда я делаю cd <TAB> , кроме каталогов в текущем каталоге, то также должны отображаться каталоги в текущей иерархии. После того как я выберу один из каталогов из иерархии или введу его, если я снова <TAB> , я должен получить параметры завершения из каталогов в родительском каталоге, которые имеют похожую иерархию. В приведенном выше примере, скажем, /usr / имеет dirnew и diranother beisdes dir1. У dirnew есть dir2 / dir3, но diranother пуст. cd dir1 <TAB> должен дать мне новый вариант, но не diranother.

1 ответ1

2

Либо у вас есть старая версия Zsh, либо ваша конфигурация нарушает ее. cd завершение Zsh имеет эту особенность, и она работает. Вы можете проверить это, запустив zsh без использования ваших настроек:

zsh -f # all settings at their default values
autoload compinit && compinit
mkdir -p tmp/a/b
mkdir -p tmp/c/b
mkdir -p tmp/b
cd tmp/a/b
cd a [TAB]

Я использую Zsh 5.1, и он правильно завершает c . Если я создаю второе возможное завершение, например, mkdir -p d/b , это дает мне c и d .

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