正式介绍我的终极Nushell配置

Apr 19 · 6min

我是一个实用主义的人,所以对bash不够满意。powershell是面向对象的,但是不够开发者友好。一个偶然的机会我发现了Nushell,从此一发不可收拾。

实话说,也不能说是偶然,因为我是写 Rust 的,这个极其现代和快速的、Rust语言写的 shell 很快吸引了我的眼球。

Nushell的好处可以归纳为以下三点:

  • 快速。它是 Rust 写的,你可以放心。
  • 现代。它支持结构性数据,支持管道,支持脚本,支持插件…… 支持你能想到的任何特性,而且语法易写易懂
  • 开箱即用。你不需要装 Oh my zsh ,像fish一样安装后即可获得候选项选择、行内补全等特性。

如果你还没接触过它,可以去官网看一下,相信你会喜欢上的。

我的几百行配置

写这玩意真的上瘾。写 Python / JavaScript 已经非常舒适了,因为它们有着简单的语法和即时的反馈。Nushell 则更进一步,不仅语法接近脚本语言,而且有着很多专属于 Shell Script 的体验,比如如果你要定义一个自定义命令,可以:

# Copy specified files / files from the clipboard, to ~/Playground/<dir>.
export def --env cvp [
    dir?: string,  # Specify a dir name. It'll be ~/Playground/<dir>.
    ...files: string # Specify files to copy. If empty, copy from clipboard.
] {
    let abs_files = $files | each { |file| $file | path expand }
    cd ~/Playground
    if ($dir != null) {
        mc $dir  # `mc`是我的另一个自定义命令,可以理解为`mkdir + cd`
    }
    if (($files | length) > 0) {
        $abs_files | each { | file | !cp $file ($file | path basename) }
    } else {
        cb paste
    }
    ls -a
}

这是我编写的其中一个命令,你会发现它足够简单而且易懂,可选参数和变长参数的语法也很直观。而且离谱的是,nushell 居然会把你写在脚本中的注释转换成帮助信息

help

你可以在这里看到我的所有配置。后续我可能还会录一个视频讲讲这些有意思的配置!

怎么同步配置呢?

我有两个电脑,一个Windows一个Mac(这很痛苦了😭),这意味着我不仅需要同步配置,还需要尽量保证我的脚本在 Windows、MacOS 和 Linux 平台上都是可用的。

经过一些挑选之后,我选中了chezmoi这个工具,它可以将寄存在 GitHub 上的配置仓库同步到你的新设备上。

如果你很信任我,可以直接使用我的配置!安装chezmoinushell后直接运行:

chezmoi init --apply gaojunran

我已经在我室友的崭新电脑上测试过了,应该可以开箱即用,希望你能喜欢!


>