кд -1, -2, -3 и т. д. в оболочке Z - PullRequest
22 голосов
/ 21 октября 2010

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

Ответы [ 3 ]

57 голосов
/ 19 января 2011

Если у вас есть 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> означает, что вы нажали клавишу 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

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

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

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

$ cd ~+2/<TAB>
4/    bar/  baz/  foo/
6 голосов
/ 21 октября 2010

Если вы используете 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.

0 голосов
/ 25 декабря 2018

c- минус предназначен для такого рода требований.

Поддерживает соответствие регулярному выражению, используя хэш md5, чтобы избежать дублирования в pushd.

Легко сбрасывать и загружать.

Этот gif показывает некоторые основные операции.

cminus usage

Вы можете проверить это на https://github.com/whitebob/cminus

...