SANSUI'S BLOG

系统外观
分类标签
RSS
Sansui 2023
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 posh-git
  6. Install oh-my-posh for showing extra info in term.
  7. Install gsudo for softlink
  8. Install eza for listing
  9. open $PROFILE in powershell, append the contents of Microsoft.PowerShell_profile.ps1

大致介绍一下用途。

  • git-bash,一系列类 unix 工具,git 一类的
  • Windows Terminal,微软的终端。我拒绝终端用 electron 去套的……
  • PSReadLine,改变一系列 powershell 的行为。比如复制粘贴的快捷键。可惜在 vscode 里会没用,只能右键粘贴。
  • posh-git,显示 git 的状态
  • oh-my-posh,美化。具体主题可能需要会自己改一下,要么丑,要么不支持提示 conda 环境或者 npm 环境。
  • 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