系统工具替换之 Rust 化推进

起因是在知乎看到了这篇 文章,讲到作者使用 Rust 新开发的终端工具生态,以构建一个能在不同设备环境下运行的终端配置。里面提到的 Starship 自己就已经在用,确实不错,而且自己确实对于 Rust 有不少的好感。于是就按照他的思路,将日常使用的一些工具,迁移到使用 Rust 实现的版本当中,体验还是挺不错的。

具体做了以下的替换。

Starship: Cross-Shell Prompt

此前在新环境开启一个 shell 之后,总是会第一时间就对 shell 进行配置,以获取更好的终端使用体验。比如在 zsh 当中使用 oh-my-zsh。不过这些 prompt 配置往往会因为其对于特定 shell 的移植性,以及实际使用起来的性能响应问题,而让人劝退。

Starship 是一个使用 Rust 实现的适用于任何 shell 的 prompt。实际使用起来,看起来足够美观,性能也不错,而且安装配置也方便,几乎是开箱即用。于是在很早就为我的 powershell 切换到 Starship 了。

基本各个包管理工具都有 Starship,在 Windows 下可以使用 scoop 安装。安装好后根据相应使用的 shell 进行配置即可。

Nushell

Nushell 是使用 Rust 实现的一种新型的 shell,得益于使用 Rust 实现,Nushell 可以运行于各个 OS 平台,即使是在 Windows 上面也有着很不错的体验。这对于一个在 Windows 上面一直没有良好终端交互体验的人来说(powershell 不能根据历史记录进行补全,补全提示也很弱,不能看到所有的候选项,只能一个个 tab 切换过去尝试,简直窒息),简直是质的的飞跃。这段时间使用下来,主要有以下的爽点。

  • 全平台提供统一的命令和功能,使得使用起来非常统一。而且提供的命令足够丰富,完全可以涵盖日常使用。
  • 良好的命令补全功能。某种程度这种补全能力才是最吸引我的哈哈哈。
  • 一切皆数据。所有命令得到的数据,可以通过管道流动,进行数据处理加工,从而得到想要的结果和效果。
    • 很多命令的输出结果都是以表格的形式返回,方便进行数据处理
  • 足够美观。命令的输入和结果的输出,都有不错的格式化,看起来体验不错。

除了提供足够好用的 shell 以外,Nushell 使用语法也不错,可以很简单地进行 shell 变成,写脚本实现自己想要的功能,比如看视频常用的,获取当前目录下最近访问的视频文件。

1
ls -l | where type == "file" and name =~ ".(rmvb|mp4|mkv)$" | sort-by accessed | reverse | first 1 | get name

同时 Nushell 也为来自使用不同 shell 的用户提供了 mapping 指南。

真心安利大家试试!

Bat: alternative to cat

Linux cat 的命令用于输出文本文件的内容,几乎是 Linux 上最常用的命令之一了。Bat 则是带有自动格式化和语法高亮的 cat 命令。而且 Windows powershell 当中居然不提供 cat 的命令或者 alias,让人不适应。Bat 还有许多的功能,比如与 git 集成,以及自动分页。

Bat 已经用很久了,它已经存在于我的每个设备上面,大量使用,已经替换掉我的 cat 了。

fd: alternative to find

fd 是使用 rust 实现的简单快捷的 find 命令代替版。实际使用的性能表现挺不错的,而且输出就自带颜色格式化,结果看起来也很美观。不过 fd 的出现,最主要是可以让我在 Windows 下面也可以用到 find,快速地找到文件。在终端使用 fd 命令,几乎可以当成一个命令行版本的 everything,来搜索文件。

zoxide

zoxide 是使用 Rust 实现的目录切换工具,是一个更加智能的 cd 命令。类似于 autojump,zoxide 可以记录历史访问切换路径,然后根据历史数据,快速跳转到目标路径。比如通过多次 cd 进入了一个深层级的目录后,后面就可以直接根据目录名一步跳转到目标目录。得益于 Rust 的跨平台能力,zoxide 适用于多种不同的 shell,而且性能表现还不错。

现在正在逐步使用 z 替换掉习惯中的 cd。

Helix: alternative to vim

Helix 是一个使用 vim 键位的终端编辑器,其自带有比较完备的配置设置,基本可以开箱即用,而且一些操作也更加简单,其内置了较多的提示和选项菜单,使用体验比 vim 要好很多,尤其是在大家都没配置的情况下。对于我这种懒折腾的人来说简直完美。

现在在服务器上也基本用 helix 来代替 vim 了,几乎没有什么学习成本。

zellij: alternative to tmux

zellij 是一款类似于 tmux 的终端复用工具。不过相比于 tmux,zellij 使用起来更加简单(因为几乎所有的操作命令都可以在窗口的指示中了解到),不需要再像用 tmux,如果一段时间没用,还得现搜一些快捷键,看怎么退出会话,怎么切换 tabs。使用体验还是不错的。


Rust 语言的发展,带来了大量工具软件的蓬勃发展。虽然有些人会觉得 Rust 开发者是不是闲得没事,总是喜欢造轮子,总是喜欢把已有的东西重新实现一遍。但我觉得这样的发展趋势还是很棒的,这也并不是简单地重复造轮子,除了 Rust 带来的性能提升以外,我觉得最主要的卖点,还是 Rust 跨平台特性,所带来的软件工具的移植性。因为 Rust 跨平台,所以可以为各个 OS 和架构都直接打出一个可用的二进制包,借助各类型的包管理工具,下载安装的体验极佳,即使是 Windows。退一步,即使包管理源还没有相应的工具,还能够通过 cargo 进行源码安装(就是花的的时间多一点,不过可以考虑使用 cargo binstall 提速一下)。

感谢 Rust,让我有机会能够在 Windows 平台下体验到许多原本只能在 Linux 系统才能够体验到的命令行工具,还能够有非常不错的体验,值得向大家推荐。