wsl+ zsh + oh-my-zsh配置

2023-11-02

wsl+ zsh + oh-my-zsh配置

经常在windows平台办公, 配置一些开发环境时在Linux中会比较简单, 参照了在Linux服务器中的配置, 同步在WSL中.

测试平台:

  • WIN10 X64专业版, V1903 (只支持WSl_V1, WSL_V2需要>=WIN2004才支持)
  • WSL类型: Ubuntu18.04
1. 安装WSL

1.1 功能组件安装

这里以图形化界面安装功能组件为例

文件管理器中粘贴: 控制面板\程序\程序和功能 => 启用或关闭Windows功能, 弹出如下窗口:

image-20200713195958008

勾选图中标记的2项, 点击确定后开始安装过程; 安装完毕后提示重启后, 重启系统即可.

1.2 安装WSL系统(程序)

这里以微软的AppStore方式安装为例

在windows store 搜索 Ubuntu, 选择Ubuntu18.04, 安装包体积相对Ubuntu16.04和Ubuntu20.04更小, 且比Ubuntu20.04运行更流畅

安装完毕, 会自动打开子系统, 第一次登录会提示输入用户名和密码, 按提示完成即可

日常使用系统,可以在启动菜单中可以找到快捷方式; 也可以配置右键快捷键, 推荐!

image-20200713200412681

注: 子系统安装好之后, 会在本地用户的环境变量PATH中看到程序的包含路径:

%USERPROFILE%\AppData\Local\Microsoft\WindowsApps, 可以在文件管理器地址栏中直接粘贴路径打开, 查看文件夹内容

2.配置oh-my-zsh

安装并配置zsh为默认shell

sudo apt-get update
sudo apt-get install zsh -y
sudo usermod -s /bin/zsh $(whoami)  # or sudo usermod -s $(which zsh) $(whoami)

oh-my-zsh自动化安装脚本下载及安装

# 方法一
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

# 方法二: 手动复制/粘贴此脚本到本地, 执行安装
https://github.com/robbyrussell/oh-my-zsh/blob/master/tools/install.sh
bash ./install.sh

搭配常用插件, 可以更高效, 如

# 智能提示
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

# 语法高亮插件
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

# 更多插件 ...

.zshrc配置文件修改并刷新配置

vim ~/.zshrc
"""
# 修改默认主题
ZSH_THEME="agnoster"

# 启动错误命令自动更正
ENABLE_CORRECTION="true"

# 开启大小写敏感
CASE_SENSITIVE="true"

# 禁用自动版本检查更新
DISABLE_AUTO_UPDATE="true"

# 启用已安装的插件, 增加要启用的插件
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

# 最后一栏,增加如下两行, 不显示用户@主机信息
# redefine prompt_context for hiding user@hostname
prompt_context () { }


# 修改完毕后, 保存并退出
"""

source ~/.zshrc 

必要配置

修改国内源

  • ubuntu软件源: https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
  • 其它, …
3.终端美化

windows终端默认字体和配色很难看, 这里以微软的开源调色工具ColorTool为例, 为WSL终端美化.

ColorTool下载: https://github.com/microsoft/terminal/releases/tag/1904.29002

下载后解压, 打开cmd/powershell切换工作目录到到解压后路径, 提供了5种主题, 选择一款喜欢的

./colortool.exe -b OneHalfLight

# all
./colortool.exe -b deuteranopia
./colortool.exe -b OneHalfDark
./colortool.exe -b OneHalfLight
./colortool.exe -b solarized_dark
./colortool.exe -b solarized_light

以PowerShell为例, 执行命令后输出如下, 会影响当前PowerShell及WSL终端显示

有兴趣的话, 可以自己对主题配色微调, 如基于OneHalfLight主题, 修改屏幕背景为纯黑色+轻度透明效果+光标颜色/形状, WSL效果如下

image-20200714203503797

修改时建议在窗口的左上角的默认值和属性两个对话框同步修改属性.

4.常见问题

4.1 WSL忘记密码: 修改密码 (PowerShell, 管理员权限)

# 设置默认登录用户为root, 重新登录系统修改用户密码
ubuntu1804.exe config --default-user root
passwd username

# 修改完毕, 在修改系统默认登录用户
ubuntu1804.exe config --default-user username

4.2 卸载系统: (PowerShell, 管理员权限)

lxrun /uninstall /full

4.3 oh-my-zsh主题乱码:

oh-my-zsh主题用到了特殊的字符, 有些字体并没有包含这类字符; 建议安装powerline/fonts,其中DejaVuSansMono系列等宽字体,在CMD中可以完美兼容, 因此只需要安装这一系列字体即可.

字体下载安装完毕后, 在WSL终端窗口中, 属性:字体面板, 选择DejaVu Sans Mono for Powerline,确定

image-20200714205256263

4.4 WSL终端, 启动VIM查看编辑文件时, 字体莫名变化为新宋体

解决方法: 修改注册表(work)

WIN + R, 输入regedit, 回车后, 定位到: 计算机\HKEY_CURRENT_USER\Console

Ubuntu18.04 发现存在如下两项

  • "计算机\HKEY_CURRENT_USER\Console%SystemRoot%_system32_wsl.exe"
    • 新建DWORD项, 名字CodePage,取值为十进制下65001 或者十六进制下0xFDE9
  • "计算机\HKEY_CURRENT_USER\Console\C:_Program Files_WindowsApps_CanonicalGroupLimited.UbuntuonWindows_2004.2020.424.0_x64__79rhkp1fndgsc_ubuntu.exe"
    • 观察到此处对应的PageCode项已经存在, 直接编辑值同上,设置为十进制65001

修改完毕后, 重启WSL.

image-20200714180036628

注意: 不同版本WIN10系统或不同安装方式(AppStore/PowerShell)以及不同版本Linux, 此处看到的内容可能不一致.

示例:

  1. 只存在: “计算机\HKEY_CURRENT_USER\Console%SystemRoot%_system32_wsl.exe”
  2. 存在: “计算机\HKEY_CURRENT_USER\Console%SystemRoot%_System32_bash.exe” , 而不是1中所示

示例1图片, 相同系统软件环境和配置流程安装Ubuntu16.04后的注册表
在这里插入图片描述

5.参考博文
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wsl+ zsh + oh-my-zsh配置 的相关文章

  • waitpid() 的作用是什么?

    有什么用waitpid 它通常用于等待特定进程完成 或者如果您使用特殊标志则更改状态 基于其进程 ID 也称为pid 它还可用于等待一组子进程中的任何一个 无论是来自特定进程组的子进程还是当前进程的任何子进程 See here http l
  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • Docker 警告:无法从守护进程获取默认注册表端点

    在 Windows 10 上 当我调用 docker 命令时 docker pull mongo windowsservercore 我得到以下输出 Warning failed to get default registry endpoi
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg
  • NUMA 在虚拟内存中是如何表示的?

    有许多资源 https en wikipedia org wiki Non uniform memory access从硬件角度描述NUMA的架构性能影响 http practical tech com infrastructure num
  • Windows CE 与嵌入式 Linux [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 现在我确信我们都清楚 Linux 与 Windows 桌面的相对优点 然而 我对嵌入式开发世界的了解却少得多 我主要对行业解决方案感兴
  • 开放简历fisherfaces

    我有这个问题 当我使用 vs2010 调试 opencv 2 4 0 facetec demo c 运行时 程序出现此错误 OpenCV错误 未知函数中图像步长错误 矩阵不连续 因此其行数无法更改 文件 src opencv modul e
  • 监控子进程的内存使用情况

    我有一个 Linux 守护进程 它分叉几个子进程并监视它们是否崩溃 根据需要重新启动 如果父进程可以监视子进程的内存使用情况 以检测内存泄漏并在超出一定大小时重新启动子进程 那就太好了 我怎样才能做到这一点 您应该能够从 proc PID
  • 使用 Rust 构建的 DLL 在运行时是否需要 libgcc.dll?

    如果我构建一个 DLLRust 语言 http rust lang org 是否需要libgcc dll在运行时出现 一方面 我在互联网上的某个地方看到过一个帖子 声称是的 rustc exe has libgcc s dw2 1 dll在
  • Windows:如何获取所有可见窗口的列表?

    无论如何都要使用相关技术重新标记 我不知道它们是什么 稍后我可能会提出更详细的问题 关于具体细节 但现在我正在尝试掌握 大局 我正在寻找一种方法来枚举 Windows 上的 真实可见窗口 我所说的 真正可见的窗口 就是指 用户所说的 窗口
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • 从 systemd bash 内联脚本创建 filename_$(date %Y-%m-%d)

    我正在尝试执行systemd计时器并希望将执行脚本的输出保存在每个日期的文件中 这是我的ExecStart脚本中的 service file ExecStart bin bash c echo date Y m d gt gt home u
  • 当用户按下打印时运行脚本,并且在脚本结束之前不开始假脱机(linux,cups)

    我需要做的是结合用户按下打印来执行 python 程序 脚本 并且在该程序退出之前不要让打印作业假脱机 原因是打印驱动程序不是开源的 我需要更改用户设置 在本例中是部门 ID 和密码 通常是每个用户 但因为这是一个信息亭 具有相同帐户的不同
  • Java 7 默认语言环境

    我刚刚安装了 jre7 我很惊讶地发现我的默认区域设置现在是 en US 对于jre6 它是de CH 与jre7有什么不同 默认区域设置不再是操作系统之一吗 顺便说一句 我使用的是Windows7 谢谢你的回答 编辑 我已经看到了语言环境
  • WndProc调用机制(WinAPI)

    我试图了解 Windows 应用程序是如何工作的 有一个WndProc函数 其中发生消息处理 LRESULT CALLBACK WndProc HWND hwnd UINT msg WPARAM wParam LPARAM lParam s
  • Apache 子进程已退出,状态为 255

    经过大量的搜索 尝试 修复 等待和哭泣 在我放弃之前 我想为这个错误抓住最后的机会 我们正在奔跑Microsoft Windows Server 2012 Apache 2 4 6 Win64 OpenSSL 1 0 1e PHP 5 5
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • Fedora dnf 更新不起作用?

    当我尝试使用 update 命令更新 Fedora 22 时 sudo dnf update 我收到以下错误 错误 无法同步存储库 更新 的缓存 无法准备内部镜像列表 Curl 错误 6 无法解析主机名 无法解析主机 mirrors fed
  • Windows 10:任务栏中的图标大小错误

    从 Windows 10 开始 任务栏中的图标大小似乎为 24x24px 如果 Windows 选择图标文件中的 24px 版本进行显示 那么这不会有问题 但它选择了 32px 版本并将其缩小 这会导致丑陋的伪像 尤其是当你的图标中有直线时

随机推荐

  • 智能家居 (6) ——语音识别线程控制

    目录 语音识别线程控制代码 inputCommand h mainPro c voiceControl c 代码测试 往期文章 语音识别线程控制代码 inputCommand h include
  • fwrite函数的用法

    fwrite函数就是写文件的函数 它的函数原型如下 fwrite const void buffer size t size size t count FILE stream 可以看到这个函数的参数有四个 buffer 数据存储的地址 si
  • 点云高度归一化处理(附 python 代码)

    gt 由于不同地物之间存在着高程的差异 为了去除地形起伏对点云数据高程值的影响 所以需要根据提取出的地面点进行点云归一化处理 这一步是很多算法的基础 可以提高后续点云分类或分割的准确度等 如下图所示 gt 归一化的过程其实相对简单 遍历每一
  • 贪心算法力扣刷题练习(含思路与题解)

    贪心算法 保证每次操作都是局部最优 使得最终结果也是全局最优的 需要找到贪心的策略 使得每次的最优能保证全局最优 通常需要排序 根据排序需求 自定义比较函数 sort a begin a end vector
  • protobuf c++编程笔记

    文章目录 字段内容的定义 修饰符 字段类型 引用方式 不同字段的方法 1 optional修饰的基本类型 2 optional修饰的对象类型 3 repeated修饰的基本类型 4 repeated修饰的对象类型 序列化 反序列化 字段内容
  • Vue + 高德地图 + 三维模型

    一 创建高德的kek和密钥 根据需求选择服务平台 我选择的是web端 JS API 二 在vue中引入高德地图 在public文件下找到index html文件引入你的key值 参考 https lbs amap com demo jsap
  • Could not resolve com.android.tools.build:gradle:4.0.0.

    打开别人发过来的项目的时候gradle一直下载不下来 然后报错 尝试了很多办法 最后在用户变量种添加 Android SDK ROOT 自己的Android SDK路径 gradle 下载成功 可能遇到的具体错误问题不一样仅供参考
  • CentOS8基础篇15:防火墙命令配置

    一 防火墙服务 1 启动 关闭 重启防火墙服务 systemctl start firewalld service systemctl stop firewalld service systemctl restart firewalld s
  • ES 查询不稳定现象及解决方案

    问题描述 对于相同的查询语句 ES 查询返回不同的检索内容 示例 1 filter match content 宝骏510 order score size 10 在上面的示例中可以看到推荐句子的第二句和第三句的顺序发生了变化 产生原因 官
  • spring事务的隔离级别。如何避免脏读或者幻读

    事务隔离级别为四个等级 默认是数据库的隔离级别 需要去数据库查询一下隔离级别 1 查看当前会话隔离级别 select tx isolation 2 查看系统当前隔离级别 select global tx isolation 隔离级别 Iso
  • unity MeshCollider组件

    在应用MeshCollider组件中的一个属性 Convex 这个功能很好用 但是他也是有一个坑在里面 他的好处 当你点击之后他会自动根据模型自动生成一个碰撞器 这个是不规则的碰撞器 他的坏处 没有点击 Convex 时候 比如当你有一个物
  • Commond:命令模式

    命令模式即将请求封装为对象Commond 执行者可以执行多个操作 即执行者才是操作真正的实现者 设其为操作0 9 每个操作都封装了一个对应的Commond类 当该Commond被调用时 Commond会令执行者执行其对应的操作 用户需要执行
  • 文化:测试团队建设--读书会

    如何做管理 曾经很迷茫 一路跌跌撞撞 慢慢的发现了 想要做好管理 团队文化和团队建设也是管理的重要环节 其实在一个大的测试团队里 有很多测试同学相互之间是没有交集的 如何让大家熟悉团结起来 团队建设是其中一个方法 下面和大家分享 团队建设
  • Linux进程通信——消息队列

    Linux进程通信 消息队列 消息队列概述 消息队列发送端 消息队列接收端 补充key值作用 消息队列互相发送接收 消息队列概述 消息队列是存在Linux内核中 以链表形式来存消息 一个消息队列由一个标识符 即队列ID 来标识 用户进程可以
  • JS技巧---Set数组去重

    在 ES6 中 引入了一个新的数据结构类型 Set 而 Set 与 Array 的结构是很类似的 且 Set 和 Array 可以相互进行转换 数组去重 也算是一个比较常见的前端面试题了 方法有很多种 这里不多赘述 下面我们看看用 Set
  • 互联网黑话

    互联网岗位的口头禅 1 各个岗位的口头禅 产品岗 没排上期 下个版本 设计岗 别戳屏幕 研发岗 实现不了 测试岗 醒醒 有bug 数据岗 你们要这个干啥 运维岗 磁盘满了 网络抖动 程序员终极大法 删库跑路 法务岗 这个有风险 公关岗 建议
  • 深入云存储系统Swift核心组件:Ring实现原理剖析

    深入云存储系统Swift核心组件 Ring实现原理剖析 简介 OpenStack是一个美国国家航空航天局和Rackspace合作研发的开源云计算项目 并成为Apache下的一个重要开源项目 目前已经发展到了180家公司参与其中 OpenSt
  • 探索MVVM -- 体会DataBinding的魅力

    前言 本文用到的demo是以 ONE 一个 的API为基础 模仿其功能实践一下MVVM的用法 以感受MVVM架构为主要目的 并未完全模仿其功能 代码结构借鉴了Google的sample 虽然谷歌今年出了一个架构组件指南 来指导开发者构建Ap
  • pdf加密在线破解

    http www unlock pdf com
  • wsl+ zsh + oh-my-zsh配置

    wsl zsh oh my zsh配置 经常在windows平台办公 配置一些开发环境时在Linux中会比较简单 参照了在Linux服务器中的配置 同步在WSL中 测试平台 WIN10 X64专业版 V1903 只支持WSl V1 WSL