Подтвердить что ты не робот

Cd -1, -2, -3 и т.д. в Z-оболочке

Как настроить Z-оболочку так, чтобы набирать cd - дает вам список ранее посещенных путей, а cd -1, -2, -3 и т.д. затем приведет вас к каталогам?

4b9b3361

Ответ 1

Если у вас setopt AUTO_PUSHD в .zshrc, то cd автоматически выполнит pushd каждого каталога, в который вы входите. Взяв пример из ZyX:

$ setopt AUTO_PUSHD
$ mkdir -p 1/2/3/4
$ cd 1
$ cd 2
$ cd 3
$ cd 4

Вы можете просмотреть список каталогов с помощью dirs:

$ dirs -v
0    ~/1/2/3/4
1    ~/1/2/3
2    ~/1/2
3    ~/1
4    ~

Чтобы включить вкладку в список, вы можете использовать аргументы + и - с помощью cd (<TAB> означает, что вы нажимаете клавишу табуляции):

$ cd +<TAB>
1 -- ~/1/2/3
2 -- ~/1/2
3 -- ~/1
4 -- ~

Или наоборот:

$ cd -<TAB>
0 -- ~
1 -- ~/1
2 -- ~/1/2
3 -- ~/1/2/3

Затем просто выберите номер для перехода в этот каталог:

$ cd +2
$ pwd
~/1/2

Вкладка Полные каталоги

Я всегда забываю волшебную последовательность, чтобы сделать следующее, чтобы обновить ответ, чтобы объяснить эту часть.

+ и - приведет вас только к каталогу, вы не сможете вставить путь в стек (т.е. cd -2/<TAB> ничего не дает). Чтобы сделать эту работу, вы можете использовать тильду (~).

Сделайте несколько каталогов в 3, чтобы сделать этот пример лучше.

$ mkdir 3/foo 3/bar 3/baz

Затем найдите каталог в стеке.

$ cd ~+<TAB>
1 -- ~/1/2/3/4
2 -- ~/1/2/3
3 -- ~/1
4 -- ~

Затем используйте вкладку завершения записи.

$ cd ~+2/<TAB>
4/    bar/  baz/  foo/

Ответ 2

Если вы используете pushd вместо cd, вы можете перечислить каталоги с dirs и cd в старый каталог с помощью popd. Вы также можете установить опцию autopush, чтобы получить cd, как и у pushd -q. Вот пример:

setopt pushdsilent # Omit printing directory stack
setopt autopush    # Make cd push directories onto stack
setopt pushdminus  # Invert meanings of +N and -N arguments to pushd
mkdir -p 1/2/3/4
cd 1
cd 2
cd 3
cd 4
popd     # Go to previous directory (3) and remove it from directory stack
pushd -  # Go to previous directory (4)
pushd -2 # Go 2 directories back the directory stack (2)

Обратите внимание, что pushd ничего не удаляет из стека каталога, он только вращает его. Подробнее см. man zshbuiltins.