Nushell
安装 Nu !
快速开始
  • Nushell 之书
  • 命令参考列表
  • 实战指南
  • 语言参考指南
  • 贡献指南
博客
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub
安装 Nu !
快速开始
  • Nushell 之书
  • 命令参考列表
  • 实战指南
  • 语言参考指南
  • 贡献指南
博客
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub
  • 简介
  • 安装
    • 默认 Shell
  • 快速入门
    • 快速入门
    • 在系统中四处移动
    • 用 Nu 的方式思考
    • Nushell 速查表
  • Nu 基础篇
    • 数据类型
    • 加载数据
    • 管道
    • 处理字符串
    • 处理列表
    • 处理记录(Records)
    • 处理表格
    • 导航和访问结构化数据
    • 特殊变量
  • Nushell 编程
    • 自定义命令
    • 别名
    • 运算符
    • 变量
    • 控制流
    • 脚本
    • 模块
      • 使用模块
      • 创建模块
    • 覆层
    • 排序
    • 测试你的 Nushell 代码
    • 最佳实践
  • Nu 作为 Shell 使用
    • 配置
    • 环境
    • 标准输入、输出和退出码
    • 运行系统(外部)命令
    • 如何配置第三方提示
    • 目录栈
    • Reedline,Nu 的行编辑器
    • 自定义补全
    • 外部命令
    • Nu 的配色和主题
    • 钩子
    • 后台任务
  • 迁移到 Nu
    • 从 Bash 到 Nu
    • 从 CMD.EXE 到 Nu
    • 从其他 Shell 或 DSL 到 Nu
    • 从命令式语言到 Nu
    • 从函数式语言到 Nu
    • Nushell 运算符
  • 设计说明
    • Nushell代码执行原理
  • (不怎么)高级篇
    • 标准库 (预览版)
    • Dataframes
    • 元数据
    • 创建你自己的错误
    • 并行
    • 插件
    • explore

目录栈

与其他一些Shell类似,Nushell提供了目录栈功能,可以方便地在多个目录之间切换。在Nushell中,此功能是标准库的一部分,可以通过多种方式访问。

注

在Nushell中,"栈"以list形式表示,但整体功能与其他Shell类似。

  • dirs模块和命令
  • shells别名

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"/目录
gdirs goto的别名
ndirs next的别名
pdirs prev的别名

当然,你也可以根据需要定义自己的别名。

在GitHub上编辑此页面
Contributors: NotTheDr01ds, Ralf Northman, Jan Klass, voyage200🍬
Prev
如何配置第三方提示
Next
Reedline,Nu 的行编辑器