使用 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
- 安装和配置Powerlevel10k
Zsh 和 Oh My Zsh
Zsh
首先需要运行以下命令来安装 zsh:
sudo apt update
sudo apt install zsh
哦我的天啊
现在您需要安装Oh My Zsh。
运行以下命令安装 Oh My Zsh:
sh -c "$(curl -fsSLk https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
更改默认 shell
默认 shell 是您启动终端时使用的 shell,要使用我们刚刚设置的配置的 zsh,请运行:
chsh -s $(which zsh)
现在运行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
主题可以添加新功能和良好的显示改进。
功率级别10k
安装
Powerlevel10k是 Zsh 的全功能主题。
该主题提供了使用基于包含图标的字体的多种元素来定制外壳样式的可能性。
Nerd 字体包含您使用该工具所需的所有图标,让您获得良好的使用体验。您可以访问Nerd 字体官方网站,查看其提供的功能,从下载页面选择您喜欢的字体,或使用速查表搜索图标。
在本教程中,我们将使用FiraCode Nerd Font Mono,因为它是一种等宽编程字体,包括印刷连字,并且可以在大多数终端上很好地呈现。
在 Windows 上安装推荐的字体
下载 FiraCode Nerd Font,然后按照终端的手动字体安装说明进行操作。
在 Linux 上安装推荐的字体
fonts
在中创建目录~/.local/share
mkdir -p ~/.local/share/fonts
然后你可以下载 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
最后,您可以按照终端的手动字体安装说明进行操作。
安装 powerlevel10k 作为 Oh-my-zsh 主题
验证你的发行版中是否存在 git:
git --version
如果您的发行版上未安装 git,请按照以下说明进行安装,然后运行:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
ZSH_THEME="powerlevel10k/powerlevel10k"
在 ~/.zshrc 中设置
sed -i 's/ZSH_THEME="[^"]*/ZSH_THEME="powerlevel10k\/powerlevel10k/g' .zshrc
配置
使用配置向导
当您exit
返回到 shell 时,Powerlevel10k 配置向导将提示您按照说明设置您选择的配置。
如果要重新启动配置向导,请运行:
p10k configure
手动高级配置
配置向导是一个很好的起点,可以快速获得一个美观的外壳,但还有更多的参数可以微调。
以下是按照自定义示例最终可以获得的结果示例,这些示例取自我们的 p10k 配置文件:
我们很高兴看到您自己的配置结果,请随时在评论部分发布屏幕截图!
您可以使用它vim
来探索和编辑 p10k 配置文件,运行以下命令来安装 vim:
sudo apt install vim
以下是一些基本的 vim 命令:
i
进入插入模式escape
退出插入模式/
输入搜索词enter
执行搜索n
查找下一个出现的位置或N
查找上一个出现的位置escape
退出插入模式,然后:wq
保存enter
文件并退出 vimescape
退出插入模式,然后:q!
退出enter
vim 而不保存- 阅读《Vim 入门》来了解这个强大的 CLI 文件编辑器的基础知识
使用vim打开p10k配置文件:
vim ~/.p10k.zsh
定制示例
将提示片段从一侧切换到另一侧
对于此示例,我们将在左侧提示中添加上下文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
...
)
更改常用颜色
如果您的终端支持 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:
- Update untracked icon to replace default
?
with a ghost from available font icons
- Add a stash icon to replace default
*
with an archive from available font icons
- Add a conflicted icon to replace default
~
with a skull from available font icons
- Add a staged icon to replace default
+
with a filled star from available font icons
- Add an unstaged icon to replace default
!
with an empty star from available font icons
```bash=
...
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 '
...
更改 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}"
...
}
软件包版本格式
- 更新当前节点包版本格式
package-name:package-version
...
typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}:${P9K_PACKAGE_VERSION//\%/%%}'
...
硬件颜色和配置
- 更新磁盘使用情况颜色
- 更新磁盘使用率级别阈值
- 更新警告时的磁盘使用情况显示
- 更新免费内存颜色
- 更新使用的交换颜色
- 更新 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=
...
开发工具颜色
...
排版 -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
- Update Terraform, Kubernetes, aws and Azure colors
```bash=
...
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'
下一篇文章
在下一篇文章“使用 git cli 改善您的体验”中,我们将重点介绍如何自定义 git。