如何设置Z shell以便键入cd - 为您提供以前访问过的路径列表,然后cd -1,-2,-3等会将您带到目录?
答案 0 :(得分:57)
如果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
然后找到堆栈中的目录。
$ cd ~+<TAB>
1 -- ~/1/2/3/4
2 -- ~/1/2/3
3 -- ~/1
4 -- ~
然后在条目上使用制表符完成。
$ cd ~+2/<TAB>
4/ bar/ baz/ foo/
答案 1 :(得分:6)
如果使用pushd
代替cd
,则可以使用dirs
列出目录,并使用popd
将旧目录列入cd。您还可以设置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
。
答案 2 :(得分:0)
c- minus是为这种要求而设计的。
它支持正则表达式匹配,使用md5哈希来使pushd
中的重复无效。
易于转储和加载。
此gif显示一些基本操作。
上签出