目录栈
与其他一些Shell类似,Nushell提供了目录栈功能,可以方便地在多个目录之间切换。在Nushell中,此功能是标准库的一部分,可以通过多种方式访问。
注
在Nushell中,"栈"以list形式表示,但整体功能与其他Shell类似。
dirs模块和命令
要使用dirs命令及其子命令,首先需要导入模块:
use std/dirs提示
要使此功能在每次启动Nushell时都可用,请将上述命令添加到你的启动配置中。
这将提供以下新命令:
| 命令 | 描述 |
|---|---|
dirs | 列出栈中的目录 |
dirs add | 添加一个或多个目录到列表中。第一个列出的目录将成为新的活动目录。类似于其他Shell中的pushd命令。 |
dirs drop | 从列表中移除当前目录。列表中的前一个目录将成为新的活动目录。类似于其他Shell中的popd命令。 |
dirs goto | 根据索引跳转到列表中的目录 |
dirs next | 将列表中的下一个目录设为活动目录。如果当前活动目录是列表中的最后一个,则循环到列表开头。 |
dirs prev | 将列表中的前一个目录设为活动目录。如果当前活动目录是列表中的第一个,则循环到列表末尾。 |
当我们开始使用dirs时,列表中只有一个目录,即活动目录。你仍然可以使用cd命令更改此目录。
cd ~
use std/dirs
dirs
# => ╭───┬────────┬─────────────────────────────────╮
# => │ # │ active │ path │
# => ├───┼────────┼─────────────────────────────────┤
# => │ 0 │ true │ /home/myuser │
# => ╰───┴────────┴─────────────────────────────────╯
cd ~/src/repo/nushell
dirs
# => ╭───┬────────┬─────────────────────────────────╮
# => │ # │ active │ path │
# => ├───┼────────┼─────────────────────────────────┤
# => │ 0 │ true │ /home/myuser/repo/nushell │
# => ╰───┴────────┴─────────────────────────────────╯注意cd只会更改活动目录。
要添加当前目录到列表中,使用dirs add命令更改到新的活动目录:
dirs add ../reedline
dirs
# => ╭───┬────────┬──────────────────────────────────╮
# => │ # │ active │ path │
# => ├───┼────────┼──────────────────────────────────┤
# => │ 0 │ false │ /home/myuser/src/repo/nushell │
# => │ 1 │ true │ /home/myuser/src/repo/reedline │
# => ╰───┴────────┴──────────────────────────────────╯让我们继续添加几个常用目录到列表中:
dirs add ../nu_scripts
dirs add ~
dirs
# => ╭───┬────────┬────────────────────────────────────╮
# => │ # │ active │ path │
# => ├───┼────────┼────────────────────────────────────┤
# => │ 0 │ false │ /home/myuser/src/repo/nushell │
# => │ 1 │ false │ /home/myuser/src/repo/reedline │
# => │ 2 │ false │ /home/myuser/src/repo/nu_scripts │
# => │ 3 │ true │ /home/myuser │
# => ╰───┴────────┴────────────────────────────────────╯现在我们可以使用dirs next、dirs prev或dirs goto轻松切换:
dirs next
# Active was 3, is now 0
pwd
# => /home/myuser/src/repo/nushell
dirs goto 2
# => /home/myuser/src/repo/nu_scripts当你完成某个目录的工作后,可以使用以下命令将其从列表中移除:
dirs drop
dirs
# => ╭───┬────────┬──────────────────────────────────╮
# => │ # │ active │ path │
# => ├───┼────────┼──────────────────────────────────┤
# => │ 0 │ false │ /home/myuser/src/repo/nushell │
# => │ 1 │ true │ /home/myuser/src/repo/reedline │
# => │ 2 │ false │ /home/myuser │
# => ╰───┴────────┴──────────────────────────────────╯当我们从列表中移除nu_scripts时,前一个目录(reedline)变为活动目录。
shells别名
一些用户可能更喜欢将此功能视为"Shell中的多个Shell",每个Shell都有自己的目录。
标准库提供了一组别名,可以替代上述dirs命令。
使用以下命令导入它们:
use std/dirs shells-aliases *内置别名包括:
| 别名 | 描述 |
|---|---|
shells | 替代dirs列出当前"Shell"/目录 |
enter | 替代dirs add进入新的"Shell"/目录 |
dexit | 替代dirs drop退出"Shell"/目录 |
g | dirs goto的别名 |
n | dirs next的别名 |
p | dirs prev的别名 |
当然,你也可以根据需要定义自己的别名。