Shell Z壳中的cd-1、-2、-3等

Shell Z壳中的cd-1、-2、-3等,shell,autocomplete,zsh,zsh-completion,Shell,Autocomplete,Zsh,Zsh Completion,如何设置Z shell,以便键入cd-可以列出以前访问过的路径,cd-1、-2、-3等会将您带到目录?如果使用pushd而不是cd,则可以使用dirs列出目录,并使用popd将cd列到旧目录。您还可以设置autopush选项以获取cd的行为类似于pushd-q。以下是一个例子: setopt pushdsilent # Omit printing directory stack setopt autopush # Make cd push directories onto stack se

如何设置Z shell,以便键入cd-可以列出以前访问过的路径,cd-1、-2、-3等会将您带到目录?

如果使用
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

如果您的
中有
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    ~
为了能够用tab键完成列表,您可以将
+
-
参数与
cd
一起使用(
表示您按下了tab键):

选项卡完整目录 我总是忘记了做以下事情的神奇顺序,所以我更新了答案来解释这一部分

+
-
只会将您带到目录,您无法完成堆栈中的路径(即
cd-2/
不提供任何信息)。要使其工作,可以使用波浪线(
~

3
中创建一些目录,使此示例更好

$ mkdir 3/foo 3/bar 3/baz
然后在堆栈中查找目录

$ cd ~+<TAB>
1 -- ~/1/2/3/4
2 -- ~/1/2/3
3 -- ~/1
4 -- ~
$cd~+
1 -- ~/1/2/3/4
2 -- ~/1/2/3
3 -- ~/1
4 -- ~
然后在条目上使用制表符完成

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

c-减号是为这种需求而设计的

它支持正则表达式匹配,使用md5哈希在
pushd
中避免重复

易于卸载和装载

此gif显示一些基本操作


您可以在

上查看它。注意,您似乎可以在任何命令中使用它!例如,
vi~+4/it.txt'将编辑文件
~/1/it.txt'这不应该在Unix和Linux或超级用户上吗?
$ 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/