Z shell中的cd -1,-2,-3等

时间:2010-10-21 11:08:41

标签: shell autocomplete zsh zsh-completion

如何设置Z shell以便键入cd - 为您提供以前访问过的路径列表,然后cd -1,-2,-3等会将您带到目录?

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显示一些基本操作。

cminus usage

您可以在https://github.com/whitebob/cminus

上签出