Windows的终端环境配置(nushell)

nushell + fnm + starship

效果展示

shell

教程特点

  • 将介绍部分软件官方未支持功能的解决方案, 但大多数都是近期内可能会加入主分支的功能, 将会持续更新。
  • 本教程为稍有终端使用基础的用户编写, 如果有部分知识无法理解请在下方评论, 我会更新教程

环境介绍

类别
系统Windows 11 专业版
版本22H2

基础软件安装

推荐使用 scoop 安装

软件当前版本功能
Nushell0.70.0shell
fnm1.31.1node 版本管理
Windows 终端1.15.2875.0terminal
FiraCode-NF-Mono 字体2.2.2Nerd Font
Starship1.11.0shell 主题
neovim0.8.0终端编辑器

Windows终端中配置 nushell

  • 命令行即为 scoop 安装目录中 nu 的当前版本可执行文件
  • icon可以从官方下载 icon
  • 其他自己喜欢配置即可
  • 配置字体为 FiraCode NFM

配置 nushell

进入 nu 环境 (直接输入 nu 回车即可), 遇到选择直接默认回车即可

不显示 banner

  1. 运行 $nu.config-path 查看配置文件地址, 或你安装了 neovim 直接 nvim $nu.config-path 亦可
  2. 查找 show_banner 并修改为 false

使用 starship

此处配置与官方和大部分教程不同, 提前让 nushell 支持 右侧提示 编辑 ~\.config\nu\fnm.nu 文件 将 替换为你starship.exe的位置 替换你懂的意思, 以及不要动它旁边的单引号

let-env STARSHIP_SHELL = "nu"
let-env STARSHIP_SESSION_KEY = (random chars -l 16)
let-env PROMPT_MULTILINE_INDICATOR = (^'替换为你starship.exe的位置' prompt --continuation)

# Does not play well with default character module.
# TODO: Also Use starship vi mode indicators?
let-env PROMPT_INDICATOR = ""

let-env PROMPT_COMMAND = {
    # jobs are not supported
    let width = (term size).columns
    ^'替换为你starship.exe的位置' prompt $"--cmd-duration=($env.CMD_DURATION_MS)" $"--status=($env.LAST_EXIT_CODE)" $"--terminal-width=($width)"
}

# Not well-suited for `starship prompt --right`.
# Built-in right prompt is equivalent to $fill$right_format in the first prompt line.
# Thus does not play well with default `add_newline = True`.
let-env PROMPT_COMMAND_RIGHT = {
    let width = (term size).columns
    ^'替换为你starship.exe的位置' prompt --right $"--cmd-duration=($env.CMD_DURATION_MS)" $"--status=($env.LAST_EXIT_CODE)" $"--terminal-width=($width)"
}

然后在nu 的配置文件中激活 , 在 $nu.config-path 末尾添加 source ~/.cache/starship/init.nu

此时 starshipright_format 配置就能使用了

附上我的配置文件, 很简洁, 位置为 ~\.config\starship.toml

1
2
3
4
5
6
add_newline = false

format = """$character"""

# move the rest of the prompt to the right
right_format = """$all"""

使用 fnm

新建 ~\.config\nu\fnm.nu 目前最简洁可用的 nushellfnm的初始化

load-env (fnm env --shell bash | lines | str replace 'export ' '' | str replace -a '"' '' | split column = | rename name value | where name != "FNM_ARCH" && name != "PATH" | reduce -f {} {|it, acc| $acc | upsert $it.name $it.value })

# Add dynamic FNM path
let-env Path = ($env.Path | append [
  $env.FNM_MULTISHELL_PATH
])

同样激活 在 $nu.config-path 末尾添加 source ~\.config\nu\fnm.nu

代理脚本

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

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}
updatedupdated2022-10-232022-10-23
Windows的终端环境配置