如何在终端/shell 中获取最近的地点?

Luc*_*lin 5 shell command-history zsh cd-command

有什么方法可以获取在终端(osx)中导航的最近“位置”(目录)的列表?我的意思是,我想打开我的终端,输入一些命令,获取我最近去过的 2 或 3 个地方,然后去那里。

就像箭头对最近的命令所做的那样。

是否可以?

Sté*_*las 6

如果您的 shell 是zsh(据我所知是较新版本的 macos 中的默认设置),您可以设置选项autopushdset -o autopushd在您的 中~/.zshrc),这将导致zsh记住您去过的所有位置(当前工作目录,用cd//pushd更改popd)。

然后,您可以看到该堆栈:

dirs
Run Code Online (Sandbox Code Playgroud)

或者dirs -v,查看堆栈上每个目录的索引,您可以在 或 中使用该索引cd +5,或者ls -ld ~+5用于第 5 个条目(传递的顶行是dirs输出中的当前目录)。

或者:

print -rC1 $dirstack
Run Code Online (Sandbox Code Playgroud)

$dirstack在数组中公开该堆栈,没有当前工作目录)。

或者,如果您启用了带有说明的高级完成(请参阅compinstall),并且完成列表位于:

cd +<Tab>
Run Code Online (Sandbox Code Playgroud)

或者

cd -<Tab>
Run Code Online (Sandbox Code Playgroud)

~-或者对于or之后的任何命令~+

any cmd ~+<Tab>
Run Code Online (Sandbox Code Playgroud)

例如,与

set -o autopushd
zstyle ':completion:*' format 'Completing %d'
zstyle ':completion:*' menu select=2
autoload -Uz compinit
compinit -i
Run Code Online (Sandbox Code Playgroud)

在 中~/.zshrc,在访问了几个目录后,按Tab两次,我会得到一个菜单,例如:

dirs
Run Code Online (Sandbox Code Playgroud)

我可以使用箭头键进行导航。

目录堆栈功能本身并不是 zsh 特定的。它和pushd//操作它popddirs命令于 1980 年引入,后来cshbash(1989 年的 1.02)和(1990 年的 1.0)复制。,zsh也来自(1991 年在 2.0 中添加到 zsh)。/来自(1989),后来被(1991) 复制,而来自(1996),后来被(1997)复制。Only (也可以使用该堆栈,如 Silent )是特定的,并且其完成框架远远领先于和 现在(但正在被 赶上)。cd +5cd -5csh~+~-bashzsh~+5zshbashautopushdcdpushdzshbashtcshfish