使

使用 oh-my-zsh 的更好的 shell 使用 oh-my-zsh 的更好的 shell ===========================[ 第 1 行 ]========================== ============================[ 第 2 行 ]=========================== 更改此参数的值以显示不同的未跟踪文件图标。 更改此参数的值以显示不同的存储文件图标。 更改此参数的值以显示不同的冲突文件图标。 更改此参数的值以显示不同的暂存文件图标。 更改此参数的值以显示不同的未暂存文件图标。排版-g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION=

2025-06-04

使用 oh-my-zsh 打造更好的 shell

使用 oh-my-zsh 打造更好的 shell

==========================[ 第 1 行 ]===========================

==========================[ 第 2 行 ]===========================

更改此参数的值以显示不同的未跟踪文件图标。

更改此参数的值以显示不同的存储文件图标。

更改此参数的值以显示不同的冲突文件图标。

更改此参数的值以显示不同的暂存文件图标。

更改此参数的值以显示不同的未暂存文件图标。

排版-g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION=

使用 oh-my-zsh 打造更好的 shell

❓ 摘要

并非如此基础:Devenv 是一系列教程,我们的目标是拥有一个良好、高效和可移植的环境,充分利用 Linux 和 Windows 的优点。

在第二个教程“使用 oh-my-zsh 实现更好的 shell”中,我们使用以下内容进行基础工作:

  • Zsh:具有扩展功能(命令行完成、命令历史记录、主题等等……)的 Linux shell。
  • Oh My Zsh:一个用于管理 Zsh 配置和主题的框架。
  • Powerlevel10k:Zsh 的快速、灵活且强大的主题。

📝 概述

要完成本教程,您需要:

Zsh 和 Oh My Zsh

Zsh

首先需要运行以下命令来安装 zsh:



sudo apt update
sudo apt install zsh


Enter fullscreen mode Exit fullscreen mode

哦我的天啊

现在您需要安装Oh My Zsh

运行以下命令安装 Oh My Zsh:



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


Enter fullscreen mode Exit fullscreen mode

更改默认 shell

默认 shell 是您启动终端时使用的 shell,要使用我们刚刚设置的配置的 zsh,请运行:



chsh -s $(which zsh)


Enter fullscreen mode Exit fullscreen mode

现在运行exit,它将关闭您当前的终端,然后再次打开它,您应该使用带有当前主题的 zsh。

查看默认配置。

您可以在主文件夹中找到默认配置文件:~/.zshrc

如果你打开它,你会看到大部分内容都有评论。

简短版本可以概括为:



# Path to your oh-my-zsh installation.
export ZSH="$HOME/.oh-my-zsh"

# Set name of the theme
ZSH_THEME="robbyrussel"

# Plugins
plugins=(git)

#import parent settings
source $ZSH/oh-my-zsh.sh


Enter fullscreen mode Exit fullscreen mode

主题可以添加新功能和良好的显示改进。

功率级别10k

安装

Powerlevel10k是 Zsh 的全功能主题。

超过9000了!Dbz meme

该主题提供了使用基于包含图标的字体的多种元素来定制外壳样式的可能性。

Nerd 字体包含您使用该工具所需的所有图标,让您获得良好的使用体验。您可以访问Nerd 字体官方网站,查看其提供的功能,从下载页面选择您喜欢的字体,或使用速查表搜索图标。

在本教程中,我们将使用FiraCode Nerd Font Mono,因为它是一种等宽编程字体,包括印刷连字,并且可以在大多数终端上很好地呈现。

在 Windows 上安装推荐的字体

下载 FiraCode Nerd Font,然后按照终端的手动字体安装说明进行操作。

在 Linux 上安装推荐的字体

fonts在中创建目录~/.local/share



mkdir -p ~/.local/share/fonts


Enter fullscreen mode Exit fullscreen mode

然后你可以下载 FiraCode Nerd Font



wget https://github.com/ryanoasis/nerd-fonts/raw/refs/heads/master/patched-fonts/FiraCode/Bold/FiraCodeNerdFontMono-Bold.ttf -P ~/.local/share/fonts
wget https://github.com/ryanoasis/nerd-fonts/raw/refs/heads/master/patched-fonts/FiraCode/Light/FiraCodeNerdFontMono-Light.ttf -P ~/.local/share/fonts
wget https://github.com/ryanoasis/nerd-fonts/raw/refs/heads/master/patched-fonts/FiraCode/Medium/FiraCodeNerdFontMono-Medium.ttf -P ~/.local/share/fonts
wget https://github.com/ryanoasis/nerd-fonts/raw/refs/heads/master/patched-fonts/FiraCode/Regular/FiraCodeNerdFontMono-Regular.ttf -P ~/.local/share/fonts
wget https://github.com/ryanoasis/nerd-fonts/raw/refs/heads/master/patched-fonts/FiraCode/Retina/FiraCodeNerdFontMono-Retina.ttf -P ~/.local/share/fonts
wget https://github.com/ryanoasis/nerd-fonts/raw/refs/heads/master/patched-fonts/FiraCode/SemiBold/FiraCodeNerdFontMono-SemiBold.ttf -P ~/.local/share/fonts


Enter fullscreen mode Exit fullscreen mode

最后,您可以按照终端的手动字体安装说明进行操作。

安装 powerlevel10k 作为 Oh-my-zsh 主题

验证你的发行版中是否存在 git:



git --version


Enter fullscreen mode Exit fullscreen mode

如果您的发行版上未安装 git,请按照以下说明进行安装,然后运行



git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k


Enter fullscreen mode Exit fullscreen mode

ZSH_THEME="powerlevel10k/powerlevel10k"在 ~/.zshrc 中设置



sed -i 's/ZSH_THEME="[^"]*/ZSH_THEME="powerlevel10k\/powerlevel10k/g' .zshrc


Enter fullscreen mode Exit fullscreen mode

配置

使用配置向导

当您exit返回到 shell 时,Powerlevel10k 配置向导将提示您按照说明设置您选择的配置

如果要重新启动配置向导,请运行:



p10k configure


Enter fullscreen mode Exit fullscreen mode

手动高级配置

配置向导是一个很好的起点,可以快速获得一个美观的外壳,但还有更多的参数可以微调。

以下是按照自定义示例最终可以获得的结果示例,这些示例取自我们的 p10k 配置文件

自定义外壳

我们很高兴看到您自己的配置结果,请随时在评论部分发布屏幕截图!

您可以使用它vim来探索和编辑 p10k 配置文件,运行以下命令来安装 vim:



sudo apt install vim


Enter fullscreen mode Exit fullscreen mode

以下是一些基本的 vim 命令:

  • i进入插入模式
  • escape退出插入模式
  • /输入搜索词
  • enter执行搜索
  • n查找下一个出现的位置或N查找上一个出现的位置
  • escape退出插入模式,然后:wq保存enter文件并退出 vim
  • escape退出插入模式,然后:q!退出entervim 而不保存
  • 阅读《Vim 入门》来了解这个强大的 CLI 文件编辑器的基础知识

使用vim打开p10k配置文件:



vim ~/.p10k.zsh

Enter fullscreen mode Exit fullscreen mode




定制示例

将提示片段从一侧切换到另一侧

对于此示例,我们将在左侧提示中添加上下文user@hostname,并在右侧添加 vcs(git)段。

左提示段
  • 添加context,在本地会话中默认不活动,但我们稍后会更改它
  • 删除vcs以使用正确的提示段“bash=”显示它

排版-g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
...
上下文#user@hostname
...

###### Right prompt segments

  • Remove context since it is now displayed with left prompt segments
  • Add vcs
  • Add contextual information about tools. Only displayed when installed and referenced by content of the current directory: Node.js, dotnet, PHP, Laravel, package
  • Add information about hardware on the next line ```bash=

typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(

=========================[ Line #1 ]=========================

vcs # git status
...
node_version # node.js version
dotnet_version # .NET version (https://dotnet.microsoft.com)
...
php_version # php version (https://www.php.net/)
laravel_version # laravel php framework version (https://laravel.com/)
...
package # name@version from package.json (https://docs.npmjs.com/files/package.json)
...

=========================[ Line #2 ]=========================

...
load # CPU load
ram # free RAM
disk_usage # disk usage
swap # used swap
battery # internal battery
wifi # wifi speed
...
)

Enter fullscreen mode Exit fullscreen mode



更改常用颜色

如果您的终端支持 hexColors,您可以使用以下格式覆盖var='hexCode'

在此示例中我们:

  • 更新部分提示段背景颜色
  • 更新上一条命令执行结果左侧显示的提示符颜色
  • 更新当前目录颜色
  • 更新最后一个命令的退出代码
  • 更新 direnv 状态 ```bash=

...
排版 -g POWERLEVEL9K_BACKGROUND='#232323'
...
排版 -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR} FOREGROUND='#7ca661'
...
排版 -g POWERLEVEL9K_PROMPT_CHAR_ERROR
{VIINS,VICMD,VIVIS,VIOWR} _FOREGROUND='#d55555'
...
排版 -g POWERLEVEL9K_DIR_FOREGROUND='#92b7d4'
...
排版 -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND='#44637a'
...
排版 -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND='#6fa0c6'
...
排版 -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR ='#6fa0c6'
...
排版-g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR ='#6fa0c6'
...
排版-g POWERLEVEL9K_STATUS_OK_FOREGROUND ='#7ca661'
...
排版-g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND ='#7ca661'
...
排版-g POWERLEVEL9K_STATUS_ERROR_FOREGROUND ='#d55555'
...
排版-g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND ='#d55555'
...
排版-g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND ='#d55555'
...
排版-g POWERLEVEL9K_DIRENV_FOREGROUND ='#6fa0c6'
...


Define VCS icons

You can override icons with the format var='charCode'
We create our own icons variables for the stashed/conflicted/staged/unstaged states.
In this example we:

...

Change the value of this parameter to show a different untracked file icon.

typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='\uf79f '

Change the value of this parameter to show a different stashed file icon.

typeset -g POWERLEVEL9K_VCS_STASHES_ICON='\uf187 '

Change the value of this parameter to show a different conflicted file icon.

typeset -g POWERLEVEL9K_VCS_CONFLICTED_ICON='\ufb8a '

Change the value of this parameter to show a different staged file icon.

typeset -g POWERLEVEL9K_VCS_STAGED_ICON='\uf005 '

Change the value of this parameter to show a different unstaged file icon.

typeset -g POWERLEVEL9K_VCS_UNSTAGED_ICON='\uf006 '
...

Enter fullscreen mode Exit fullscreen mode



更改 VCS 颜色和图标

我们将编辑 my_git_formatter() 原始函数

  • 更新 git 状态颜色 ```bash=

...
function my_git_formatter() {
...
if (( $1 )); then
...
local clean='%F{#6fa0c6}' # 蓝色前景
local modified='%F{#e8c273}' # 黄色前景
local untracked='%F{#e1874d}' # 橙色前景
local conflicted='%F{#d55555}' # 红色前景
...
}



  • Update git status constants to use the previously defined icons variables (later in function) ```bash=

...
function my_git_formatter() {
...
(( VCS_STATUS_STASHES )) && res+=" ${clean}${(g::)POWERLEVEL9K_VCS_STATUS_STASHES_ICON}${VCS_STATUS_STASHES}"
...
(( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}${(g::)POWERLEVEL9K_VCS_CONFLICTED_ICON}${VCS_STATUS_NUM_CONFLICTED}"
...
(( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}${(g::)POWERLEVEL9K_VCS_STAGED_ICON}${VCS_STATUS_NUM_STAGED}"
...
(( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}${(g::)POWERLEVEL9K_VCS_UNSTAGED_ICON}${VCS_STATUS_NUM_UNSTAGED}"
...
}

Enter fullscreen mode Exit fullscreen mode



软件包版本格式
  • 更新当前节点包版本格式package-name:package-version


...
typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}:${P9K_PACKAGE_VERSION//\%/%%}'
...

Enter fullscreen mode Exit fullscreen mode



硬件颜色和配置
  • 更新磁盘使用情况颜色
  • 更新磁盘使用率级别阈值
  • 更新警告时的磁盘使用情况显示
  • 更新免费内存颜色
  • 更新使用的交换颜色
  • 更新 CPU 负载颜色
  • 更新电池颜色
  • 更新 wifi 颜色
  • 更新时间颜色```bash=

...
排版 -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND='#97b882'
排版 -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND='#e1874d'
排版 -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND='#d55555'
...
排版 -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=80
排版 -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=90
...
排版 -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=true
...
排版 -g POWERLEVEL9K_RAM_FOREGROUND='#af7ca4'
...
排版 -g POWERLEVEL9K_SWAP_FOREGROUND='#e1874d'
...
排版 -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND='#9090c0'
...
排版 -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND='#e1874d'
...
排版 -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND='#d55555'
...
排版 -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND='#d55555'
...
排版 -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND='#7ca661'
...
排版 -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND='#d55555'
...
排版 -g POWERLEVEL9K_WIFI_FOREGROUND='#9fbfb4'
...
排版-g POWERLEVEL9K_TIME_FOREGROUND='#76a394'
...


Context colors
  • Update context colors
  • Update context display to be always shown by commenting the relevant line ```bash=

...
typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND='#db6e51'
...
typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND='#d55555'
...
typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND='#e8c273'
...

typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION=

...

Enter fullscreen mode Exit fullscreen mode



开发工具颜色

...
排版 -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND='#97b882'
...
排版 -g POWERLEVEL9K_ASDF_RUST_FOREGROUND='#e4917a'
...
排版 -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND='#b0b0d2'
...
排版 -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND='#e8a478'
...
排版 -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND='#c29cba'
...
排版 -g POWERLEVEL9K_ASDF_PHP_FOREGROUND='#92b7d4'
...
排版 -g POWERLEVEL9K_NODENV_FOREGROUND='#7ca661'
...
排版 -g POWERLEVEL9K_NVM_FOREGROUND='#7ca661'
...
排版 -g POWERLEVEL9K_NODEENV_FOREGROUND='#7ca661'
...
排版 -g POWERLEVEL9K_NODE_VERSION_FOREGROUND='#7ca661'
...
排版 -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND='#9090c0'
...
排版 -g POWERLEVEL9K_PHP_VERSION_FOREGROUND='#af7ca4'
...
排版 -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND='#db6e51'
...
排版 -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND='#e1874d'
...
排版 -g POWERLEVEL9K_PACKAGE_FOREGROUND='#97b882'
...
排版-g POWERLEVEL9K_JENV_FOREGROUND='#e1874d'
...
排版-g POWERLEVEL9K_PHPENV_FOREGROUND='#af7ca4'
...
排版-g POWERLEVEL9K_SCALAENV_FOREGROUND='#e8a478'


Change cloud tools colors

...
typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND='#727299'
...
typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND='#5a82a1'
...
typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND='#ba7040'
...
typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND='#ba7040'
...
typeset -g POWERLEVEL9K_AZURE_FOREGROUND='#92b7d4'

Enter fullscreen mode Exit fullscreen mode




下一篇文章

在下一篇文章“使用 git cli 改善您的体验”中,我们将重点介绍如何自定义 git。

贡献者

罗曼·坎博尼·
马克·加瓦尼尔

参考文献

文章来源:https://dev.to/codingones/a-better-shell-with-oh-my-zsh-1m0h
PREV
10 个使用 CSS Transforms 的下拉菜单动画
NEXT
🔥如何快速学习编程语言或框架🔥 💥1. 问些傻问题:胡扯也有意义。💥2. 理解代码,不要死记硬背:谷歌可以帮你做到。💥3. 要有耐心:稳扎稳打才是快。💥4. 动手做:即使你只知道变量(傻吗?)💥5. 避免分心:不要试图学习所有东西。💥6. 保持一致:说起来容易做起来难。💥7. 计划是关键:“如果你不能手动解决,你也不能用代码解决”。💥8. 最后,当一切都太难时,不要放弃。还有一件事