2024年,提升Windows開發和使用體驗實踐 - 終端&命令列篇

程序设计实验室發表於2024-03-05

前言

經過前面的鋪墊,終於繼續更新了,這個大機率是本系列近期的最後一篇了。

同時之前有些內容更新,我也補充到這一篇裡面。

關於 scoop 管理器的補充

scoop 常用命令

scoop help # 檢視幫助
scoop help < 某個命令 > # 具體檢視某個命令的幫助

scoop info <app>      # 檢視 APP 資訊
scoop install <app>   # 安裝 APP
scoop uinstall <app>  # 解除安裝 APP
scoop reset [app]@[version] # 切換版本

scoop list  # 列出已安裝的 APP
scoop search # 搜尋 APP
scoop status # 檢查哪些軟體有更新

scoop update # 更新 Scoop 自身
scoop update appName1 appName2 # 更新某些 app
scoop update *  # 更新所有 app (前提是需要在 apps 目錄下操作)

scoop bucket known # 透過此命令列出已知所有 bucket(軟體源)
scoop bucket add bucketName # 新增某個 bucket

scoop cache rm <app>  # 移除某個 app 的快取
scoop cache rm *      # 移除所有快取
scoop cleanup <app>   # 刪除舊版本

scoop 常見問題

安裝軟體時出現 hash 檢查錯誤

  • 多次安裝後仍出現錯誤,找到其 JSON 檔案,下載到本地更改其 hash 值,上傳到自己的 bucket 中,進行更新。
  • 使用 scoop install -s 選項以忽略其 hash 檢查,具體使用方法請用 scoop help install

更新軟體時如何刪除舊版本軟體

使用 scoop cleanup 命令,具體用法檢視 scoop help cleanup

終端

OK,來到 Windows 開發體驗的重災區了

命令列一直以來都是 Windows 的弱勢,現在有了一些 Rust 工具鏈,可以慢慢改善這一現狀。

Nerd Fonts

想要美化終端介面,請先安裝一個 nerd 字型

這時候包管理器的作用再次體現,使用 scoop 就能安裝。

先新增個 bucket

scoop bucket add nerd-fonts

專案地址: https://github.com/matthewjberger/scoop-nerd-fonts

然後選擇一個喜歡的字型進行安裝

scoop install FiraCode-NF

另外,這個 bucket 裡面的字型很多,現在已經不僅僅是 nerd font 了,也可以安裝一些普通的字型,比如

scoop install SarasaGothic-SC # 安裝更紗黑體(簡體中文)
scoop install Wenquanyi-Microhei # 安裝文泉驛微米黑
scoop install Wenquanyi-Zenhei # 安裝文泉驛正黑

參考資料

  • https://blog.thecjw.me/?p=1160
  • https://github.com/ryanoasis/nerd-fonts

內建 Powershell

先說結論:內建的 PowerShell 是垃圾

不推薦使用 oh-my-posh ,啟動速度太慢了,本身 PowerShell 的啟動速度就慢,加上 oh-my-posh 就更慢了。

終端美化使用 Starship 就行了,接下來會介紹。

編輯配置的方法: nano $PROFILE

這是我的配置

# oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/amro.omp.json" | Invoke-Expression

Import-Module gsudoModule

set-alias -name ll -value ls
set-alias -name ef -value dotnet-ef

# starship
Invoke-Expression (&starship init powershell)
$ENV:STARSHIP_CONFIG = "$HOME\.config\starship\plain-text-symbols.toml"

Powershell 7

這是微軟新出的開源跨平臺終端,比內建的 PowerShell 的功能強了一丟丟,效能更好。(從專案倉庫來看,是使用 C# 開發的,所以跨平臺做得不錯)

專案地址: https://github.com/PowerShell/PowerShell

下載個安裝包安裝就完事了

我的 $PROFILE 配置

Set-PSReadLineOption -PredictionSource HistoryAndPlugin
Set-PSReadLineKeyHandler -Chord Tab -Function MenuComplete
Set-PSReadLineKeyHandler -Key UpArrow -ScriptBlock {
	[Microsoft.PowerShell.PSConsoleReadLine]::HistorySearchBackward()
  [Microsoft.PowerShell.PSConsoleReadLine]::EndOfLine()
}
Set-PSReadLineKeyHandler -Key DownArrow -ScriptBlock {
	[Microsoft.PowerShell.PSConsoleReadLine]::HistorySearchForward()
  [Microsoft.PowerShell.PSConsoleReadLine]::EndOfLine()
}
Set-PSReadLineOption -PredictionViewStyle ListView
set-alias -name ll -value ls

# starship
Invoke-Expression (&starship init powershell)
$ENV:STARSHIP_CONFIG = "$HOME\.config\starship\gruvbox-rainbow.toml"

Starship

  • 配置 - https://starship.rs/zh-CN/config/
  • 預設 - https://starship.rs/zh-CN/presets/

NuShell

https://www.nushell.sh/zh-CN/book/

參考資料

  • 使用 starship 統一 cmd, powershell, git bash 等樣式 - https://zhuanlan.zhihu.com/p/674148271
  • 逐步搭建現代大一統終端(Alacritty +Zellij -> WezTerm) - https://zhuanlan.zhihu.com/p/436024560

命令列工具

WinSW

程序管理工具,類似 Linux 下的 supervisor ,可以將要執行的程式安裝成服務,設定自動執行。

安裝

scoop install winsw

使用方式

與 supervisor 類似,寫配置檔案,然後安裝服務,可以啟動和停止啥的。

我的目錄結構

這裡我設定了兩個服務,vnc 和 frpc

 WinSW
 ├─ config
 │  ├─ vnc.xml
 │  ├─ vnc.wrapper.log
 │  ├─ vnc.out.log.old
 │  ├─ vnc.out.log
 │  ├─ vnc.err.log.old
 │  ├─ vnc.err.log
 │  ├─ frpc.xml
 │  ├─ frpc.wrapper.log
 │  ├─ frpc.out.log.old
 │  ├─ frpc.out.log
 │  ├─ frpc.err.log.old
 │  └─ frpc.err.log
 └─ WinSW.exe

配置檔案內容

frpc.xml 為例

<service>
  <id>frpc</id>
  <name>frpc</name>
  <description>frp自動啟動</description>
  <executable>D:\softwares\frp\frpc-a.exe</executable>
  <arguments>-c D:\softwares\frp\frpc.ini</arguments>
  <log mode="roll"></log>
  <startmode>Automatic</startmode>
</service>

安裝服務和啟動

敲命令

# 安裝服務
winsw install ./config/frpc.xml
# 啟動
winsw start ./config/frpc.xml

就這樣

在找到更好的工具之前,暫時先用這個。

已知問題

我在使用這個工具的時候,經常遇到開機不會自啟的問題,即使檢視服務管理,確認已經安裝的服務是自動啟動並且啟用的狀態,開機後還是不會自啟。

不知道是啥問題,我正在尋找這個 WinSW 的代替品。

由於 scoop 是使用 PowerShell 指令碼寫的,當新增了比較多的 bucket 之後,search 速度會比較慢。

有大佬寫了個新的搜尋工具,比原版的快多了,使用的語言是我沒聽過的 Zig 語言。

專案地址: https://github.com/shilangyu/scoop-search

安裝方式

scoop install scoop-search

如果想將原來的 search 替換為 scoop-search,可以在 $profile 中新增配置

Invoke-Expression (&scoop-search --hook)

和原版的對比

> scoop search curl
Results from local buckets...

Name    Version Source Binaries
----    ------- ------ --------
curl    8.6.0_2 main
curlie  1.7.2   main
gnupg1  1.4.23  main   gpgkeys_curl.exe
gow     0.8.0   main   curl.exe
grpcurl 1.8.9   main

scoop-search

x scoop-search curl
'main' bucket:
    curl (8.6.0_2)
    curlie (1.7.2)
    gnupg1 (1.4.23) --> includes 'gpgkeys_curl.exe'
    gow (0.8.0) --> includes 'curl.exe'
    grpcurl (1.8.9)

gow

在 Windows 補齊 Unix 工具鏈

專案地址: https://github.com/bmatzelle/gow

Gow (Gnu On Windows) is the lightweight alternative to Cygwin. It uses a convenient Windows installer that installs about 130 extremely useful open source UNIX applications compiled as native win32 binaries. It is designed to be as small as possible, about 10 MB, as opposed to Cygwin which can run well over 100 MB depending upon options.

裡面有一百多個 Unix 系的小工具,比如我常用的 nano

具體的工具列表在這: https://github.com/bmatzelle/gow/wiki/executables_list

安裝很簡單,使用 scoop

scoop install gow

gsudo

Windows 下的 sudo 工具

在 Linux 下要以管理員許可權執行命令只需要在最前面加上 sudo 即可,Windows 卻很麻煩,需要專門開啟一個管理員模式的 PowerShell 視窗。

這個小工具可以解決這個問題,使用方法和 Linux 的 sudo 命令一樣。

PS:好訊息是微軟打算在 Windows 11 里加入原生的 sudo 命令

安裝

scoop install gsudo

proxychains

命令列代理工具

也是 Linux 下常用的,沒想到 Windows 也能用,(但似乎有點奇怪的問題)

安裝

scoop install proxychains

erdtree

使用 rust 開發的檔案樹展示工具

寫文章的時候用來展示目錄結構很方便,沒必要目錄結構都截圖。

安裝

scoop install erdtree

我常用的引數

erd -L 3 --dir-order last -y inverted --suppress-size -.

引數說明:

  • -L 3: 遍歷3級目錄
  • --dir-order last: 目錄顯示在前面
  • -y inverted: -y 是設定 layout ,可選項為 regular, inverted, flat, iflat
  • --suppress-size: 隱藏檔案大小
  • -.: 顯示隱藏檔案

blessed-contrib

這是一個命令列的儀表盤元件庫,基於 Nodejs ,實際作用似乎沒有,不過就是好玩,眾所周知 Linux 下有很多好玩的命令列工具,但 Windows 這邊就少了很多,這個是用 Nodejs 開發的,所以是跨平臺的,Windows 也可以用。

專案地址: https://github.com/yaronn/blessed-contrib

使用方法

git clone https://github.com/yaronn/blessed-contrib.git
cd blessed-contrib
npm install
node ./examples/dashboard.js

需要安裝 Nodejs 環境,稍微麻煩一點,如果有用 go 或者 rust 開發的類似工具就好了。

加入到 $profile 方便後續使用,開啟配置檔案

nano $profile

新增一個 PowerShell 函式

function dashboard {
	node "C:\path\to\blessed-contrib\examples\dashboard.js"
}

後續只要輸入 dashboard 命令就可以了

相關文章