SANSUI'S BLOG

系统外观
分类标签
RSS
Sansui 2025
All rights reserved
人活着就是为了卡卡西

Windows 命令行相关配置

11 月 29 日, 2023

常用 shell

一直以来 windows 的命令行方案都很多,个人感觉都有不太好用的点,怎么配置也是仁者见仁智者见智的一个事情。先总结一下常用shell 方案

  • powershell 官方shell,各种工具库支持最全,缺点自带的命令太长,以至于完全没有日常使用的想法。
  • msys2 windows 上的类 unix 环境,基于现代 Cygwin (POSIX兼容层) 和 MinGW-w64(工具包)。确实像 unix,一般命令可以无缝迁移。缺点是兼容性,需要手动配置很多东西,比如是否继承 windows 环境变量,不继承的话不想维护两份环境,继承了又容易冲突。
  • git bash msys2 阉割版,无包管理,多了 git。
  • wsl 完全的 Linux 子系统,但太占内存。

方案选择

我需求

  • 常用命令必须是类 unix 命令
  • 有包管理器,各类命令行工具配置友好且兼容性不错。
  • 不要太占内存

结果发现这就是经典的三圈相交,没有任何一个常用方案能满足以上要求。

最后,我决定用 powershell。除了第一条外都满足。后面两条属于难以解决的硬伤,而第一条可以编写脚本,将常用的命令模拟。

powershell 配置流程

包含工具包、终端美化。

  1. Install the latest Powershell Core
  2. Install git-bash for basic bash and git tools
  3. Install Windows Terminal and open Powershell
  4. Install PSReadLine
  5. Install starship with Winget, Don't use scoop(too slow).
  6. Install gsudo for softlink
  7. Install eza for listing
  8. open $PROFILE in powershell, append the contents of Microsoft.PowerShell_profile.ps1

大致介绍一下用途。

  • git-bash,一系列类 unix 工具,git 一类的
  • Windows Terminal,微软的终端。我拒绝终端用 electron 去套的……
  • PSReadLine,改变一系列 powershell 的行为。比如复制粘贴的快捷键。可惜在 vscode 里会没用,只能右键粘贴。
  • oh-my-posh,美化。需要用 Winget 或者自己 Setup 安装。不要让 Scoop 装,找环境变量这一步能把启动速度拖慢1s。这个可以用 starship 或者 posh-git 替代。不过都挺慢的。
  • gsudo,提权,类似 unix 的 sudo。可能运行时会被杀软报毒,需要加入信任区。
  • eza,2024年了,终于有了一个像样的 ls 替代……

powershell 的用户配置文件输入 $PROFILE 就能找到。

我的配置文件上传到了 Microsoft.PowerShell_profile.ps1。需要挂代理打开。配置文件包含 ls ln open grep which 等命令模拟。powershell 的缩写默认支持了 mv cat rm 等命令,配合起来日常基本够用。

终端代理

我在配置文件中设置了proxyunproxy函数,以快速设置与取消终端的代理连接。自己改下端口就能用。因为我自己习惯上不开系统代理,都是软件内的 http 连接。

# Proxy Togglers
function proxy {
	$portInUse = netstat -ano | findstr "LISTENING" | findstr "7890"
	$portInUse2 = netstat -ano | findstr "LISTENING" | findstr "10808"
	if ($portInUse -ne $null) {
		$env:HTTP_PROXY = "socks5://127.0.0.1:7890"
		$env:HTTPS_PROXY = "socks5://127.0.0.1:7890"
		Write-Host "Proxy set to socks port 7890"
	} elseif ($portInUse2 -ne $null) {
		$env:HTTP_PROXY = "socks5://127.0.0.1:10808"
		$env:HTTPS_PROXY = "socks5://127.0.0.1:10808"
		Write-Host "Proxy set to socks port 10808"
	} else {
		$env:HTTP_PROXY = "socks5://127.0.0.1:1080"
		$env:HTTPS_PROXY = "socks5://127.0.0.1:1080"
		Write-Host "Proxy set to socks port "
	}
}
function unproxy {
	$env:HTTP_PROXY = ""
	$env:HTTPS_PROXY = ""
}

其他常用工具

  • winget:自带的包管理器,命令行工具都是这个装的。部分用的 scoop,非常少。还有的直接用的官网 setup。

  • nvim:命令行编辑器,vim 的替代品。我用的是发行版 AstroNvim。之前也有自己折腾插件,太懒得维护了,算了。

  • nodejs:JS 环境,nvim 的插件要用,开发也要用

  • zoxide:快速跳转目录。最有用的功能没有之一。类似 unix 的 autojump

  • Terminal-Icons:ls 命令加 icon,还能解决 ls 不高亮的问题。但是,颜色很丑。但是,我不也想再配置了,配置真的心好累。

  • ripgrep:类似 grep 的用法。我在模拟 grep 命令时只是单纯替换成了 findstr,真的 grep 建议用 ripgrep (rg) 替代。nvim 的 telescope 一些插件也会用到。

安装脚本汇总:

winget install conda

winget install neovim
git clone --depth 1 https://github.com/AstroNvim/AstroNvim ~/.config/nvim

winget install gerardog.gsudo
winget install OpenJS.NodeJSLTS
Install-Module -Name Terminal-Icons -Repository PSGallery; Import-Module -Name Terminal-Icons
# z-jump
winget install zoxide # z-jump, see https://github.com/ajeetdsouza/zoxide
winget install BurntSushi.ripgrep.MSVC # grep 的完全替代品

ZSH

有关 zsh 相关的配置,我放在了 Windows 命令行相关配置之 msys2+zsh+zi

更新于 2023-11-29 12:07
Waline