Zsh:相反顺序的目录

Zsh:相反顺序的目录

我对如何运作有点困惑dirs。文档说:

目录

不带参数,打印目录堆栈的内容。使用命令将目录添加到此堆栈中pushd,并使用cdpopd命令删除目录。

Q1.我从不使用popdNor pushd,但我注意到它dirs会跟踪我去过的目录(对我来说这意味着,cd 添加,不删除,目录到堆栈中)

问题2使用 进行长时间会话后cd,通常会dirs打印一长串目录,但此列表首先打印最近的目录,并以最后一个目录结束,因此如果我有一个长列表,屏幕会滚动,我可以'不容易看到最新的目录集(通常是我最感兴趣的目录)。

如何以相反的顺序打印目录列表?

我尝试过dirs | sort -r,但这不能正确对条目进行排序,例如我得到

20 /foo20/bar
2  /foo2/bar
19 ...
18
...
16
11
10
1
0

未排序的原件看起来像

1 /foo/bar
2 /foo2/bar
3  ...
..  
9
10
11
..
20
21
..
30

答案1

sort默认情况下,基于 ASCII 值进行排序,这将无法正确对具有不同位数的数字进行排序。您可以使用该-n选项告诉它根据前导数值进行排序。

dirs -v | sort -nr

或者,由于 的输出dirs已经排序,但您只想将其变为相反的顺序,您可以使用该tac命令(相反cat):

dirs -p | tac

答案2

我这样做cd +,然后点击Tab查看并导航最近访问的目录列表,最新的目录位于顶部。

答案3

A1

你启用了吗AUTO_PUSHD

可以使用setopt autopushd或来启用它set -N

这就是为什么cd要添加到目录堆栈。

A2

我猜你是在跑步dirs -v,不只是dirs? (我认为-v需要让它每行列出一个。)

为什么不只是dirs -v | head?或者dirs -v | less? (或者dirs | tac正如 qqx 所建议的那样。)

答案4

如果您只是sort -r按降序排列行,从第一个字符开始到每行的末尾进行整理。如果您想要“字母”排序,则需要将排序键限制为第二个字段:

dirs | sort -rk2,2

这指定了 (r) 逆序排序,排序 (k)ey 为字段二 (2) 至字段 (2)。默认情况下,字段以空格分隔。如果不是,您可以使用 指定分隔符-t

另一方面,如果您确实想按数字排序,请执行以下操作:

dirs | sort -rkn1,1

相关内容