Nushell

安装

安装 Nu | Nushell

配置

配置 | Nushell

Vscode 高亮插件

GitHub - nushell/vscode-nushell-lang: A Nushell grammar for Visual Studio Code with IDE support

配置 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

安装 Oh-my-posh

oh-my-posh 是一个 Powershell 的主题项目,可以将 Powershell 美化成类似 ohmyzsh 的效果。安装 oh-my-posh 也很简单,运行下面的命令即可。

1
scoop install oh-my-posh

这里有很多主题可供选择,https://ohmyposh.dev/docs/themes。选择好后,在 Powershell 的配置文件中填入以下内容。

1
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\powerlevel10k_rainbow.omp.json" | Invoke-Expression

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
8
9
Import-Module PSReadLine

Set-PSReadLineOption -EditMode Emacs

Set-PSReadLineOption -PredictionSource HistoryAndPlugin

Set-PSReadLineOption -PredictionViewStyle ListView

Set-PSReadLineOption -BellStyle None

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 autojump exa

autojump 实现目录间的快速跳转。
如果使用「autojump」,只需要输入

1
$ j 路径关键词

可以看到直接跳进该路径下了。

「autojump」会按照关键词使用频率做一个排序,有的时候有一些路径有相似的关键词时,使用「tab」可以查看排序,例如:

想访问哪一个,输入相应的数字即可。

  1. autojump 只能跳转到已经用 cd 进入过的目录,无法跳转到没有用 cd 进入过的目录。即使用 cd 进入过一个特定的目录才会被记录到 autojump 的数据库中,才可以使用 autojump 进行跳转。

  2. 自动跳转不支持 - 开头的目录。

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

powerlevel 10 k 安装

打开此链接 github,进入到库里面,按照安装步骤:

  1. 安装字体:随便下载一个字体,我是下载了第一个,然后双击下载文件,最后我们开启 terminal,点击偏好设置,在字体那个地方点击更改,右上角搜索 Meslo 就能看到你安装的字体
    在这里插入图片描述

  2. 安装 powerlevel 10 k

1
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ~/module/powerlevel10k

你要是用着之后想换的话直接在命令行里加

1
p10k configure

Zsh Vi mod

jeffreytse/zsh-vi-mode: 💻 A better and friendly vi(vim) mode plugin for ZSH. (github.com)
使用 vi 模式编辑命令

1
git clone https://gitee.com/mirrors_jeffreytse/zsh-vi-mode.git ~/module/zsh-vi-mode

zsh-completions

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

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
6
7
8
source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /usr/share/autojump/autojump.zsh
source ~/module/zsh-vi-mode/zsh-vi-mode.plugin.zsh
source ~/module/powerlevel10k/powerlevel10k.zsh-theme
source ~/module/fzf-tab/fzf-tab.plugin.zsh
source ~/module/zsh-completions/zsh-completions.plugin.zsh
alias ls="exa"

starship

命令行常用工具

替代品

Sudo

Linux 最好用的命令是什么?sudo!一键切换管理员权限,Powershell 每次发现忘了开管理员,就得重开一个,很麻烦的有没有!

所以我们来给 Windows 装一个 sudo:

1
scoop search sudo

然后就可以爽到飞起了。以后不管什么命令失败,都可以 sudo 试一试。

Zoxide 快速跳转

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

MobaXterm

安装完毕之后界面长这个样。

当然你们刚安装完成是不会有任何 session 的。下面来创建第一个 SSH session。

点击菜单栏 「sessions」 –> 「new session」,即可弹出 「session setting」 对话框。由上面那一大串的连接方式我们就可以知道 Moba 的强大之处。

我们点选第一个 SSH 图标,并填入相关信息,就可以完成 session 创建了。

点击确定后,输入密码就可以连接上虚拟机了。而且边上虚拟机之后,它会自动通过 FTP 也连接到虚拟机,直接拖拽就可以进行文件复制了。

快速连接 session

创建一个 session 之后,就可以在左侧的 session 标签里留下它的信息,下次需要连接的时候直接双击即可。


几个有用的设置

隐藏菜单栏下的那排按钮

菜单栏下的那排按钮感觉有点鸡肋,全部可以从菜单栏里找到,而且使用频率也不是非常高。况且,大部分屏幕是长方形的,上下空间有限,左右还比较富余一些,因此去掉它可以省下很大空间。

在菜单栏点击 「view」 –> 「show menu bar」,即可隐藏此排按钮。

右键粘贴

在 Moba 及很多终端工具里,都有这样的功能:鼠标左键划选复制文件,右键粘贴文本。但在 Moba 中右键粘贴功能默认不打开,我们可以手动打开。

在菜单栏点击 「settings」 –> 「Configuration」,在弹出的对话框中选择 「terminal」,再将 「paste using right-click」 打上对勾即可。

关闭自动弹出 SFTP

Moba 在连接上远程电脑之后,将自动打开左侧的 SFTP 侧边栏。有时我们并不需要 SFTP,同时主窗口是黑色的,SFTP 又是白色的,显得有点刺眼,因此可以将自动弹出 SFTP 功能关闭掉。

在菜单栏点击 「settings」 –> 「Configuration」,在弹出的对话框中选择 「SSH」,再将 「automaticall switch to SSH-browser tab after login」 前面的对勾去掉即可。