打造Windows下的开发环境  (未完结)

在windows下,如果不用WSL,是否也能打造出好用的类Linux开发环境呢?

avatar_cover Alex Xiang
2024-12-05 352阅读

在Windows下开发程序,我们有宇宙第一IDE,但是如果我们想做更广泛的开发,例如Go语言做Web后端服务、Python做机器学习等等,用VS就不太好做了,这时我们可以考虑WSL+Windows Terminal的方案,对于通用程序的开发(不涉及Linux系统级的功能),确实可以做到99%的Linux替换程度。

但是WSL也是有一些小问题的,比如:

  • 性能略有损失
  • 隔着一层容器,文件访问有时候并不是十分方便
  • 网络有时也会有一些麻烦的配置问题
  • 最近发现Cursor无法加载WSL插件

当然WSL还是Windows下类Linux开发环境的最佳选择,那如果不用WSL呢?当我们尝试使用Powershell下的oh-my-posh后,当我们用winget简单的安装更新Go、Python甚至grep、sed这些Linux下的小工具的时候,Windows下原生的类Linux开发环境的搭建似乎也不是不可能。下面我们就从软件管理、终端、各种编程语言环境的配置等等方面来看看,如何在Windows下配置一个好用的开发环境。

1. 软件管理

1.1 winget

相当多的软件在windows下都可以直接用winget安装和管理,这个是windows原生支持的,相比choco之类的第三方包管理软件更有优势。下面是用winget升级go的截图,由原来的1.23.3升级到1.23.4:

1.2 可以用winget直接安装管理的软件

  • python:winget install "Python 3.13" --s winget
  • go:winget install goLang.Go
  • sed: winget install sed -s winget
  • vim:winget install vim -s winget --id vim.vim
  • git:winget install Microsoft.Git -s winget
  • cmake:winget install cmake -s winget
  • make:winget install make -s winget
  • clang: winget install LLVM

注:LLVM安装完之后需要添加路径C:\Program Files\LLVM\bin到PATH

1.3 GnuWin32项目中的软件

GnuWin32项目包含了很多Linux命令到Windows的移植,具体的程序列表参考GnuWin Packages。这些程序其实也可以用winget来安装,不过要注意需要在PATH中添加C:\Program Files (x86)\GnuWin32\bin,而且并非所有GnuWin32项目中的程序都可以用winget安装,这个可以通过winget search GnuWin32来查询。

  • grep:winget install GnuWin32.Grep
  • tree:winget install GnuWin32.Tree
  • diff:winget install GnuWin32.DiffUtils
  • tar:winget install GnuWin32.Tar
  • which:winget install GnuWin32.Which
  • find:winget install GnuWin32.FindUtils
  • gzip:winget install GnuWin32.Gzip
  • unzip:winget install GnuWin32.Unzip
  • gettext:winget install GnuWin32.GetText

diff、find等命令会与PowerShell内置的Diff命令冲突,如果想优先使用GnuWin32的diff,就需要写一个PowerShell函数,覆盖掉内置的Diff。(TODO)

1.4 无法用winget安装的GnuWin32程序

需要手工从项目网站上下载安装包自行安装。常用的包括以下程序:

  • awk

1.5 MinGW系列软件

这个还是不可少的,主要是gcc只能用这个装。装起来还是比较简单的,到官网 下载一个最新的版本,解压后放到合适的目录下,然后将bin目录加到PATH里即可。

顺便说一下,MinGW的下载器mingw-get-setup.exe下载的MinGW版本非常低,比如gcc只有6.3,并且下载速度还很慢,建议直接下载压缩包。我是从winlibs.com下载的,选择UCRT runtime的版本,比如我下载的是GCC 14.2.0 (with POSIX threads) + LLVM/Clang/LLD/LLDB 19.1.1 + MinGW-w64 12.0.0 UCRT - release 2 (LATEST)

1.6 其他软件

  • column

2. 终端

2.1 Windows Terminal

Windows Terminal肯定是首选,这是一个全新的、流行的、功能强大的命令行终端工具。包含很多来社区呼声很高的特性,例如:多 Tab 支持、富文本、多语言支持、可配置、主题和样式,支持 emoji 和基于 GPU 运算的文本渲染等等。Windows Terminal支持多种终端,包括命令提示符、Powershell、Ubuntu(WSL)、Developer Powershell for VS、Azure Cloud Shell等等,它的多Tab支持非常棒,可以在不同的TAB打开不同类型的终端,非常方便。

2.2 PowerShell7

注意不是Windows 11自带的PowerShell,那个版本是5.1

2.3 oh-my-posh

超高颜值终端主题,由Go语言打造,跨平台、兼容多种 Shell,是Oh My Zsh 的理想替代品。PowerShell装上oh-my-posh之后完全换了个样。

网上搜到的一些安装教程其实有些过时,最好安装官网的说明去安装,直接用winget安装,而不是通过安装PowerShell插件的方式。参考oh-my-posh installation

winget install JanDeDobbeleer.OhMyPosh -s winget
oh-my-posh font install meslo
oh-my-posh init pwsh --config ~/jandedobbeleer.omp.json | Invoke-Expression

上面的命令中,jandedobbeleer是主题名,可以改成你喜欢的主题。oh-my-posh支持相当多的主题,所有主题可以在主题列表看到,有主题的预览,点金进去还可以看到主题的具体配置。

我比较推荐M365Princess主题,其实也没啥理由,就是这个主题排在前面并且看上去还不错。这个主题的预览是这样的:

rust (4)   wagtail (4)   zola (4)   kaggle (3)   vscode (3)   deepseek (2)   gemma (2)   go (2)   winui (2)   wsl (2)