Nushell

安装

安装 Nu | Nushell

配置

配置 | Nushell
Windows 的 Nushell 配置与 VSCode 集成(不说废话)
https://blog.yusong.me/terminal/shell/nushell

配置 nushell

不显示 banner

  1. 运行 $nu.config-path 查看配置文件地址, 或你安装了 neovim 直接 nvim $nu.config-path 亦可

  2. 查找 show_banner 并修改为 false

代理脚本

1
2
alias nuproxy = (let-env http_proxy = "http://127.0.0.1:7890" ; let-env https_proxy = "http://127.0.0.1:7890")
alias unproxy = (unlet-env http_proxy ; unlet-env https_proxy ; )

alias

1
2
3
4
5
6
alias l = (ls)
alias ll = (ls -al)
alias c = (clear)
alias pwd = ($env.PWD)
def b [file] {bat -p $file}
def n [file] {nvim $file}

使用

强大的 REPL 能力

作为一个 shell,尤其是一个新的 shell,上手是否简单,使用是否 easy?这一点,nushell 也可圈可点(目前版本也还有一些不足,改进之后会更好):

  • help 命令几乎可以涵盖你绝大部分的搜索需求。由于 nushell 中所有的指令都是以 command 的形式提供,你可以使用 help -f keyword 来搜索相关的命令。例如:
1
2
help -f remove
help -f upper

在学习 nushell 之前,先了解一下它的命令集,是很有帮助的,后续也方便快速的查找。尤其是 nushell 中与 filter 相关的一系列命令,它非常类似于 Java 8/Scala 中的一些集合 λ 函数。

  • 还算不错的调试命令,例如:
  • view source
  • scope
  • debug/inspect/explore:显示变量的值
  • explain/metadata/describe: 查看变量的元信息

强大的 completion 能力

nushell 自身的命令具有强大的 completion 能力,而且,它还能把这个能力扩展到外部命令之上,而且,这种扩展的实现非常简单,你也可以对你常用的工具,包装一个 completion 的能力。参考:

Custom completions | Nushell​www.nushell.sh/book/custom_completions.html

比如我引入了 https://github.com/nushell/nu_scripts/blob/main/custom-completions/git/git-completions.nu 之后,我现在使用 git 命令行,基本上就无需搜索了,感觉效率比使用 GUI 工具要提高了不少。

完备的语言能力,可以编写更简单、可读、鲁棒、强大的脚本

nushell 自身是一个编程语言,这一点倒不奇怪(bash、zsh 等也是这样的),不过,有一些特性让 nushell 相比其他的 shell 有更为强大的编程能力:

  • nushell 针对 completion、argument process, command help 提供了语言级的支持,现在,你只需要定义一个简单的函数,它就有了 completion、argument process 的能力。非常的优美。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# run the mpp performance bench
def-env main [
case?: string@cases-list # run the given case (prefix match)
--verbose # show step results
--list-details: bool # list all cases with sql
--list-simple: bool # list all cases'name
] {
if $list_details { return $cases }
else if $list_simple { return ($cases | select case) }
if $verbose {
$env.verbose = $verbose
}

if ($case == null) {
$cases | each { |it| (compareSql $it.case $it.sql) } | reject sql
} else {
$cases | where { |it| $it.case | str starts-with $case } |
each { |it| (compareSql $it.case $it.sql) } | reject sql
}
}

这个能力太让我开心了,几乎是零成本,就获得了显著的脚本的可用性提升。

  • 强类型。我更偏爱强类型的语言,代码有更强的鲁棒性。
  • 简洁、友好的输出。结合使用 nushell 的 table,可以很简单的输出优美的报告。

Powershell 美化

安装 NF 字体

后面介绍的一些功能会有显示一些特殊字符的需求,所以这里我们要提前安装一些支持特殊字符的字体。而 nerd-fonts 这个项目,包含了众多适配过特殊字符的字体,可以放心使用。这里推荐 Meslo-Nerd-Fonts,可以在 scoop 中安装。

1
2
3
4
# scoop默认没有开启nerd-fonts分类,需要开启才能安装相关字体
scoop bucket add nerd-fonts
# 安装字体时需要在管理员权限的终端中运行
scoop install Meslo-NF-Mono

Windows Terminal (终端) 选项

然后再来配置一下 Windows Terminal (终端) ,点击下拉菜单选择设置打开设置标签页,然后依次修改以下选项:

  • 启动 -> 默认配置文件,改为 Powershell,如果你已经安装了 Powershell 7.2,这里应当可以自动搜索到。否则可能需要手动编辑配置文件。
  • 启动 -> 默认终端应用程序,改为 Windows Terminal (终端) 。
  • 外观 -> 在选项卡中显示亚力克效果,选择启用。
  • 配色方案,这里可以根据自己喜好调整。
  • 配置文件默认值 -> 外观 -> 字体,改为 MesloLGS NF 字体,字号按照自己屏幕大小选择,再开启亚力克效果,透明度选择 70% 左右。

对所有终端生效

在终端中配置只能在当前终端生效,为了让它能够在所有 Powershell 中永久生效,需要在配置文件中编辑。

在 Powershell 中运行以下命令,用 vscode 打开 Powershell 的配置文件,如果你没有 vscode,也可以改成 notepad 用记事本来编辑配置文件。

1
code $PROFILE

PSReadLine

想让 Powershell 也拥有提示和补全功能?PSReadLine 可以帮你,这是一个可以增强终端体验的工具。

安装 PSReadLine

PowerShell/PSReadLine: A bash inspired readline implementation for PowerShell (github.com)
确保你使用的是 Powershell 7.2,然后运行下面的命令。

1
2
3
Install-Module PSReadLine -AllowPrerelease -Force
# 或者你喜欢稳定版
Install-Module PSReadLine -Scope CurrentUser

使用 PSReadLine

要使用 PSReadLine,同样需要在 $PROFILE 中添加一些配置,可以参考 官方文档

1
2
3
4
5
6
7
Import-Module PSReadLine

Set-PSReadLineOption -EditMode Emacs
Set-PSReadLineOption -PredictionSource HistoryAndPlugin
Set-PSReadLineOption -PredictionViewStyle ListView
Set-PSReadLineOption -BellStyle None
Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete

zsh 配置

Zsh 安装

  • 查看自己系统是否存在 zsh
1
cat /etc/shells
  • 查看是否是使用的 zsh
1
echo $SHELL
  • ubuntu
1
2
3
4
5
6
apt-get update
# ubuntu下载安装zsh
apt install zsh -y
# 切换
chsh -s /bin/zsh
reboot

第一次进入 Zsh 会自动出现一个配置界面,这个界面可以根据需要自定义 Zsh。

在这里输入  1  就可以进入配置界面了。

配置界面中各个菜单代表的意思分别是:

  • 1:设置命令历史记录相关的选项
  • 2:设置命令补全系统
  • 3:设置热建
  • 4:选择各种常见的选项,只需要选择 “On” 或者 “Off”
  • 0:退出,并使用空白(默认)配置
  • a:终止设置并退出
  • q:退出

这里根据提示,然后按照你自己的喜好配置就可以了。配置好后,会在你的用户目录下生成  .zshrc  文件。然后我们要去这个文件中启用插件和主题。

Ubuntu 安装插件

1
sudo apt-get install zsh-autosuggestions zsh-syntax-highlighting eza

zsh-autosuggestion
基于历史记录,进行命令的推荐和补全。
zsh-syntax-highlighting
对输入的命令提供高亮显示和语法检查。
eza-community/eza: A modern alternative to ls
用于替代原生的  ls,通过不同的颜色来更好地区分文件的类型及相关的元属性。

zsh-completions

https://github.com/zsh-users/zsh-completions/tree/master

1
git clone https://github.com/zsh-users/zsh-completions.git ~/module/zsh-completions

Fzf-tab

Aloxaf/fzf-tab: Replace zsh’s default completion selection menu with fzf! (github.com)

1
2
sudo apt-get install fzf
git clone https://gitee.com/mirrors_Aloxaf/fzf-tab.git ~/module/fzf-tab

~/. zshrc

1
2
3
4
5
source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source ~/module/fzf-tab/fzf-tab.plugin.zsh
source ~/module/zsh-completions/zsh-completions.plugin.zsh
alias ls="eza"

命令行常用工具

替代品

Zoxide 快速跳转

ajeetdsouza/zoxide: A smarter cd command. Supports all major shells. (github.com)