在 Windows 上使用 Zsh 和 Oh My Zsh 实现 WSL2 的完全自动化

最后更新: 26月2026
  • WSL2 允许您在 Windows 中使用完整的 Linux 系统,并将其与 Zsh 结合,从而创建一个强大而现代的终端。
  • Windows Terminal、Nerd Fonts 和 Oh My Zsh 通过自定义主题、图标、插件和别名增强视觉和功能体验。
  • 引导脚本、点文件和开发容器使整个开发团队的环境自动化和版本控制变得容易。
  • 与 VS Code 和 NVM、Conda、BAT、LSD 或 FZF 等工具的集成,可创建一个稳定且可复现的工作流程。

Windows 上的 WSL2 Zsh 自动化

如果你在Windows 系统上使用 Node.js 或 Python 进行开发,并且想要体验 Linux 的便捷性,同时又不想放弃你的游戏、常用工具或工作流程,那么 WSL2 和 Zsh 的组合或许正是你梦寐以求的。拥有一个真正的 Linux 发行版,配备功能强大的终端和高度自动化的配置,让你无需再花费数小时复制粘贴命令,轻松搭建开发环境。

本指南将以详尽细致的方式,指导您如何使用 Zsh 和 Oh My Zsh 完全自动化 WSL2 环境,如何将其与 Windows Terminal 和 Visual Studio Code 集成,以及如何将其打包成脚本和配置文件,以便您(或团队中的任何成员)都能在几分钟内复现相同的设置。我们的目标是让您减少配置时间,将更多精力投入到代码编写中。

什么是 WSL2?为什么它值得与 Zsh 一起使用?

WSL(Windows 子系统 Linux 版)是一个允许您在 Windows 系统中运行 Linux 的层,无需繁琐的虚拟机或双启动。微软在 WSL2 中更进一步:它使用 Hyper-V 运行完整的 Linux 内核,资源消耗极低,性能也接近原生安装。

得益于此,您可以直接从 Microsoft Store 或使用 PowerShell 命令安装 Ubuntu、Debian、Kali 或 Alpine 等发行版,并享受 Linux 文件系统、apt 软件包、开发工具,当然还有像Zsh这样的高级 shell以及Oh My Zsh及其插件。

多年来,在 Windows 上编程一直缺乏吸引力:没有 bash,文件系统笨拙,原生开发工具也少,大多数开发者最终都迁移到了 Linux 或 macOS。WSL2 的出现彻底改变了这一切:你仍然在 Windows 系统上,但却能像在 Linux 发行版上一样工作,并且几乎可以自动化整个配置过程。

将 WSL2 与 Zsh 结合的妙处在于,Zsh 提供的终端体验远胜于经典的 bash:高级自动完成、建议、主题、Git 集成、NVM 插件、别名、语法高亮等等,一旦你尝试过,就很难放弃。

自定义 WSL2 和 Zsh 环境

在 Windows 10 或 11 上安装并准备 WSL2

在深入探讨自动化微调之前,您需要启用 WSL2 并安装 Linux 发行版。如今的安装过程比早期版本简单得多,几乎所有操作都可以用一条命令完成。

在较新的 Windows 10(版本 2004 或更高版本)或 Windows 11中,只需以管理员身份打开 PowerShell(在“开始”菜单中搜索,右键单击,选择“以管理员身份运行”),然后启动即可:

wsl --install

此命令会启用必要的可选功能,下载Linux 内核,将WSL2 设置为默认版本,并将Ubuntu安装为默认发行版。流程完成后,系统会提示您重启计算机以应用更改。

如果您偏好其他发行版,可以在命令中指定,例如安装 Debian:

wsl --install -d Debian

您可随时使用以下命令查看已安装发行版的状态及其版本:

wsl -l -v

如果您想更换发行版或清理不再使用的发行版,您可以选择诸如在线列出可用发行版或删除特定安装等方式:

wsl -l -o
wsl --unregister Ubuntu-20.04

首次启动发行版时,将出现一个基于文本的向导,要求您执行以下操作: 创建 UNIX 用户及其密码那将是您在 WSL 中的主要用户,他们的典型 HOME 位于 /home/tuusuario请务必记下您的用户名和密码,因为您将使用它们进行管理操作。 sudo.

配置 Windows Terminal 以与 WSL2 配合使用

WSL2 安装并运行后,下一步合乎逻辑的做法是使用 Windows Terminal 来增强您在 Windows 中的命令行体验。该应用程序支持选项卡、面板、主题、透明度、特定发行版配置文件、图标字体等等。

从Microsoft Store安装 Windows Terminal ,打开后,通常默认会显示 PowerShell 或 CMD 配置文件。从选项卡下拉箭头中,您可以选择您的 WSL 发行版(Ubuntu、Debian 等),并在新标签页中打开它。

为 Ubuntu 或你在 WSL 中使用的任何发行版都会默认打开。您可以编辑设置。Windows Terminal 会将设置保存到一个 JSON 文件中,该文件可从设置菜单访问。找到该字段。 "defaultProfile" 并放置 Ubuntu 配置文件 GUID (你会在列表中看到它) profiles) 作为值。

除此之外,你还可以 自定义颜色主题并添加亚克力透明效果 为了赋予它更现代的感觉。例如,在部分 "defaults" 对于配置文件,您可以这样定义:

  如何激活 Ubuntu 专业版并充分利用其优势

"defaults": {
"useAcrylic": true,
"acrylicOpacity": 0.4
}

如果你想在颜色方面更进一步,你可以添加一个 自定义方案 在该部分 "schemes" 从 JSON 中定义背景颜色、前景色和基本终端调色板。一个典型的例子是 Solarized 主题,然后您可以使用该属性将 WSL 配置文件关联到该主题。 "colorScheme" : "wsl" 在相应的个人资料中。

Windows Terminal 搭配 WSL2 和 Zsh

在 WSL2 中安装并自动化 Zsh + Oh My Zsh

WSL 和 Windows Terminal 的基础架构已经搭建完毕,现在是时候为 shell 增添一些强大的功能了。Zsh是比 bash 强大得多的替代方案,结合Oh My Zsh,它就变成了一把瑞士军刀,可以用来处理 Git、Node、Python 以及几乎所有其他终端程序。

在您的 WSL 发行版(例如 Ubuntu)中,首先更新软件仓库并安装最少必要的软件包:

sudo apt update
sudo apt install git zsh -y

然后使用官方脚本安装 Oh My Zsh,利用curl 下载安装程序并直接运行它:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

安装过程中,系统会询问您是否要将Zsh 设置为默认 shell;请选择“是”。如果您需要手动设置,可以使用以下命令:

chsh -s /bin/zsh

完成后,将在您的 HOME 目录中生成一个名为“configuration file”的文件。 ~/.zshrc一切都可控:插件、主题、别名、环境、路由……

Oh My Zsh 的一个非常受欢迎的主题是 隐士专注于清晰地显示 Git 信息。要启用它,请编辑该文件。 ~/.zshrc 使用您喜欢的编辑器(例如) vi ~/.zshrc o nano ~/.zshrc)并确保邮件主题看起来像这样:

ZSH_THEME="agnoster"

此外,建议在 bash 和 Zsh 中都这样做: 强制 shell 在 Linux HOME 目录中启动 (不在 Windows 用户文件夹中),因为 WSL 在发行版的原生文件系统中运行效果更好。只需将以下内容添加到末尾即可。 ~/.zshrc 一条简单的线:

cd ~

Nerd Fonts 和 Powerline:终端中的图标和美学

为了让 Zsh 和 Oh My Zsh 主题正常显示,您需要使用支持特殊图标和符号的字体(即所谓的 Nerd Fonts 或 Powerline Fonts)。否则,您会在高级提示符中看到奇怪的方块或错乱的字符。

您有两种常用的选择:安装经典的 Powerline 字体包,或者选择特定的 Nerd Font 字体,例如MesloLGS NF或Hack Nerd Font。一种快捷方法是从 Windows 的 PowerShell 克隆 Powerline 字体库,首先导航到一个空文件夹:

git clone https://github.com/powerline/fonts.git
cd fonts
.\install.ps1

安装脚本会自动向系统中添加一些字体。然后,在 Windows 终端设置中,为 WSL 配置文件选择已安装的字体之一,例如:

"fontFace": "DejaVu Sans Mono for Powerline"

如果您更喜欢现代字体,可以从 Nerd Fonts 网站下载特定的 Nerd Font(例如MesloLGS NF Regular.ttf),双击并选择“安装”将其安装到 Windows 上,然后在 Windows 终端配置文件中选择它作为您的字体。

如果您使用的是Powerlevel10k等高级主题,强烈建议您使用 Nerd Fonts 字体。要安装此主题,您可以在 WSL 用户帐户中执行以下操作:

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >> ~/.zshrc

重新加载 Zsh 后(zsh 或者关闭并重新打开终端),将启动一个引导向导(p10k configure要根据您的喜好自定义提示,请生成一个文件 ~/.p10k.zsh 所有设置都已完成。

WSL2 和 Zsh 的高级自动化

适用于 Zsh 的实用插件:瞬间提升效率

Oh My Zsh 的一大优势在于它允许您轻松添加插件来增强工作流程。以下列出了一些 WSL2 开发环境中常用的插件。

Git插件默认启用,它会在提示符中直接显示您当前所在的分支、是否有待处理的更改、是否有未提交的更改等等。这非常适合在您浏览代码仓库时随时掌握其状态。

另一个经典工具是zsh-autosuggestions,它会根据你的历史记录以灰色显示命令建议,允许你通过按键接受建议,避免重复输入相同的长组合键。安装方法:

git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions

强烈推荐使用zsh-syntax-highlighting,它会根据命令拼写是否正确、指向的文件是否存在等情况对命令进行着色,帮助您在按下 Enter 键之前检测语法错误:

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.zsh/zsh-syntax-highlighting

激活这些插件,并将以下内容添加到您的文件末尾。 ~/.zshrc 类似于:

source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

另一个非常实用的附加功能是Oh My Zsh sudo 插件,例如,它可以让您按下组合键快速在最后一个执行的命令前添加“sudo”。您可以点击此处下载:

mkdir -p ~/.zsh/sudo-plugin && cd ~/.zsh/sudo-plugin
wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/plugins/sudo/sudo.plugin.zsh

然后将其添加到您的列表中以激活它。 ~/.zshrc:

source ~/.zsh/sudo-plugin/sudo.plugin.zsh

增强型命令行工具(BAT、LSD、FZF、HTTPie)

既然你在调整终端,那就值得安装一些…… 现代的替代传统公用设施 如 cat o ls以及搜索工具和用户友好的 HTTP 客户端。

  云中的 Linux:它是什么以及它为什么重要?

蝙蝠 这是“专业版” cat与 语法高亮、编号、Git 集成非常适合直接在终端中读取代码文件。您可以从 GitHub 下载相应的软件包进行安装(并根据您的架构进行适配):

wget https://github.com/sharkdp/bat/releases/download/v0.20.0/bat_0.20.0_amd64.deb
sudo dpkg -i bat_0.20.0_amd64.deb

要将其集成到您的工作流程中,您可以在其中创建别名。 ~/.zshrc 所以在写作时 cat 我实际上调用了 BAT,但保留了传统实用程序的快捷方式:

alias cat='/bin/bat'
alias catn='/bin/cat'
alias catnl='/bin/bat --paging=never'

就其本身而言, LSD 取代 ls 同 颜色、图标和更易读的输出它的安装方式与BAT类似:

wget https://github.com/Peltoche/lsd/releases/download/0.21.0/lsd_0.21.0_amd64.deb
sudo dpkg -i lsd_0.21.0_amd64.deb

然后,您可以重新定义常用别名,例如对目录进行排序、显示详细信息、隐藏详细信息等:

alias ll='lsd -lh --group-dirs=first'
alias la='lsd -a --group-dirs=first'
alias l='lsd --group-dirs=first'
alias lla='lsd -lha --group-dirs=first'
alias ls='lsd --group-dirs=first'

对于终端内的交互式搜索,FZF几乎是不可或缺的:它启动了一个增量式搜索引擎,该搜索引擎与历史记录、路径和其他命令集成在一起。它的安装方法是克隆其代码库并运行安装脚本:

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

安装程序会将以下内容添加到您的系统中 ~/.zshrc el source 相应的(类似的东西) [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh这样一切就绪。它可以通过快捷方式激活,例如 CTRL + T..

最后,如果您使用 API, HTTPie 它提供的体验比……要舒适得多。 curl与 彩色输出和高度易读的语法您可以通过添加其存储库并使用该存储库来安装它。 apt:

curl -SsL https://packages.httpie.io/deb/KEY.gpg | apt-key add -
curl -SsL -o /etc/apt/sources.list.d/httpie.list https://packages.httpie.io/deb/httpie.list
apt update
apt install httpie
apt upgrade httpie

WSL2 中的 Node.js、NVM、Python 和其他工具

搭建这套系统的主要原因之一是为 Node.js、Python 和其他技术提供一个稳健的环境,并实现简单易用的版本控制。这正是Node 的NVM和 Python 的 Conda 等工具发挥作用的地方。

对于 Node.js 来说,理想的解决方案是使用NVM(Node 版本管理器),它允许您安装多个版本,并通过几个命令在它们之间切换。在您的 WSL2 服务器上,您可以使用以下命令安装 NVM:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | zsh

接下来,安装 Node(当前稳定版本或特定版本):

nvm install node
nvm install 18.17.0

如果您想检查一切是否正常,可以使用典型的版本验证命令,这些命令应该会返回有效值:

node --version
npm --version

使用 Zsh 时,NVM 有时不会在打开终端时自动加载。您可以通过两种方式解决此问题: 手动添加必要的变量 ~/.zshrc 或者使用插件 zsh-nvm 出自 Oh My Zsh。手动配置可能如下所示:

export NVM_DIR=~/.nvm
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

如果您选择该插件,请打开 ~/.zshrc找到插件行(例如) plugins=(git))并添加 zsh-nvm 将其添加到列表中。保存并重启终端后,NVM 应该可以正常加载。

对于 Python 来说, Conda (或 Miniconda)是一个非常强大的选择,它允许你创建隔离的环境、管理依赖项,并在不与全局系统交互的情况下处理 Python 版本。有一些自动化脚本可以在 WSL 配置仓库中几乎透明地安装 Conda、GPU 驱动程序和其他组件。

使用脚本、点文件和开发容器实现配置自动化

到目前为止,我们已经了解了如何手动配置所有内容,但打造良好工作环境的关键,尤其是在团队协作中,在于自动化用户引导和配置版本控制。WSL2 非常适合这项工作,因为它允许你将从安装到 shell 自定义的所有内容打包在一起。

一种非常常见的做法是…… 引导脚本 (例如: install.sh o setup.sh在一个团队代码库中,按顺序执行以下任务:

  • 检查先决条件 (Windows 版本、已激活的 WSL2、必要时是否安装了 Docker Desktop 等)。
  • 安装或更新 WSL 发行版基础软件包,Zsh、Oh My Zsh、NVM、Conda 等。
  • 克隆并应用点文件 (.zshrc, .bashrc, .gitconfig主题文件、共享别名……)。
  • 安装项目堆栈工具 (Node、Python、数据库、特定命令行界面)。
  • 配置验证脚本 如 make check-env 核实一切是否正确。

这些脚本必须是 幂等也就是说,它们应该能够多次运行而不会破坏任何东西,并且建议将所有环境变量记录在一个文件中,例如 .env.example 这样,每个人都可以在不修改主脚本的情况下自定义自己的环境。

另一个非常强大的层面是 VS Code 开发容器 (.devcontainer它们由环境的声明式描述(Dockerfile、VS Code 配置、扩展、端口等)组成,允许 每个项目都有自己的开发容器结合 WSL2,这要归功于扩展程序。 远程 – WSL您可以在 WSL 中的 Linux 容器内打开一个存储库,并确保每个人都拥有相同的版本和工具。

同时,维护一个版本化的配置文件库(例如在 GitHub 上)有助于在多台计算机之间,甚至在同一开发者的不同机器之间共享和同步 shell 配置、别名、主题和程序。诸如chezmoi之类的工具或简单的符号复制脚本被广泛用于此目的。

  如何在 Windows 中启用麦克风权限

将 WSL2 和 Zsh 与 Visual Studio Code 集成

如果将整个环境与像Visual Studio Code这样轻量级但功能强大的编辑器集成在一起,体验将大大提升。这样做的目的是让VS Code 直接与 WSL 文件系统交互,从而避免性能和权限问题。

首先,从 VS Code 官网下载安装到 Windows 系统上。然后,在 VS Code 编辑器中,打开“扩展”选项卡(快捷键Ctrl + Shift + X),搜索并安装“Remote - WSL”扩展。此扩展允许您打开位于 Linux 发行版上的文件夹和项目,所有逻辑都在 WSL 中运行。

安装完成后,您可以在 Ubuntu 终端中运行以下命令:

code .

这将打开 VS Code,并连接到 WSL 环境,同时赋予您完全访问其中已安装工具的权限。为了实现视觉集成,您可以将集成的 VS Code 终端配置为使用与 Windows Terminal 中相同的 Nerd Font 字体,这样图标也能美观显示。

{
"terminal.integrated.fontFamily": "DejaVu Sans Mono for Powerline"
}

在档案中 settings.json 在 VS Code 中,您还可以通过配置如下配置文件,将默认 Windows 终端设置为 WSL 中的 Ubuntu:

"terminal.integrated.profiles.windows": {
"Ubuntu (WSL)": {
"path": "C:\\Windows\\System32\\wsl.exe",
"args": ["-d", "Ubuntu"]
}
},
"terminal.integrated.defaultProfile.windows": "Ubuntu (WSL)"

趁此机会,您还可以启用保存时的自动格式化、括号对的颜色显示以及其他一些小改进,让编辑器的日常使用更加愉快。

自动化脚本和完整的 WSL2 配置存储库

虽然您可以自行构建脚本基础设施,但也可以依赖预构建的存储库来自动化大部分工作。其中一些存储库包含 Linux 指南、用于安装终端实用程序(Oh My Zsh、插件、主题)、Conda、GPU 驱动程序以及数据科学或 Web 开发环境所需的其他基本组件的脚本。

这些存储库背后的理念很明确:只需一个命令,即可运行一个 Bash 脚本来更新发行版,在必要时安装 curl 和 Node.js,处理 NVM,下载 Nerd Fonts 等字体,使用主题和一组合理的插件和别名配置 Zsh,并使您的终端准备就绪。

在执行这些脚本的过程中,您会看到,在几个地方,系统会询问您…… 您的管理员密码 由于使用了 sudo这是完全正常的,因为会安装软件包、修改系统路径并将文件复制到受保护的位置。

在某些情况下,他们会要求你 选择特定版本的工具,例如 BAT 或 LSD (例如: bat_0.25.0_amd64.deb o lsd_1.1.5_amd64.deb这取决于 GitHub 上可用的版本以及您机器的架构(现在通常的情况是 amd64请务必选择正确的软件包,以避免出现不兼容错误。

这种脚本会产生一个这样的环境: Zsh 已经有一个文件 .zshrc 综合它拥有主题、插件、cat/ls 命令别名、Gitmoji 集成(在你灵感枯竭时可以用图标标记提交)、语法高亮、Oh My Zsh 自动补全以及其他诸多实用功能。哇,这绝对是那种你会想整天都把它放在屏幕上的终端之一。

为了完成自定义,您甚至可以 调整主题,使其仅显示用户名(并隐藏主机名)。 直接修改特定的主题文件,例如 agnoster.zsh-theme 在路线上 ~/.oh-my-zsh/themes将对应的行更改为类似这样的内容:

prompt_segment green black "%(!.%{%F{yellow}%}.)%n"

有了这一切,团队中的任何开发人员都可以克隆配置存储库,运行一个命令,并在几分钟内拥有与其他人相同的环境:相同的 shell、相同的主题、相同版本的基础工具和相同的终端行为,而不会出现“它在我的电脑上运行正常”或“我不记得那天我安装了什么”之类的情况。

最终,搭建和自动化 WSL2 和 Zsh 环境需要整合多个组件:Windows 系统中的 Linux 内核、配置完善的终端(例如 Windows Terminal)、使用 Oh My Zsh 及其插件增强的 shell、BAT、LSD 或 FZF 等现代工具、使用 NVM 或 Conda 进行版本控制、通过 Remote-WSL 与 VS Code 集成,以及用于可靠地复现所有这些配置的脚本和配置文件。如果您花些时间进行微调,就能拥有一个完善的生态系统,从零开始编程只需几分钟,而无需花费整个下午手动重新安装各种组件。