Powerlevel9k 简介
Powerlevel9k主题可以用于 vanilla ZSH 或 ZSH 框架,如 oh-my-ZSH、 Prezto、 Antigen 等等。
Powerlevel9k的四个主要目标:
- 开箱即用:让用户无需过多配置即可拥有一个让人眼前一亮的主题
- 极易定制:为那些想调整提示符的用户,提供更加语义化和模块化的方式直接在
~/.zshrc
中进行配置。Powerlevel9k将提示符分割成不同的分段,用户可以使用这些内置的分段来自由组合最终的提示符。 - 提供丰富的配置分段(Segments):内置分段涵盖使用场景非常多;从表示计算机状态的分段到单元测试覆盖率的分段再到 AWS 实例的分段,都有提供。
- 保证主题渲染的速度:Powerlevel9k 尽可能优化代码以提高执行速度
这是我的个人配置效果:
![fa8f53834053f304a5597aaf0303b09f.png](https://i-blog.csdnimg.cn/blog_migrate/9c08531cf23914dde561980e9bd641e0.jpeg)
Powerlevel9k 简写为 P9k
原文首发于:
Powerlevel9k:zsh下最棒的Powerline主题www.thisfaner.com![d4fe53dca423f254d699e35c74249834.png](https://i-blog.csdnimg.cn/blog_migrate/9fcca4e5a68e51c0b9c150f9af9789ab.png)
这里的格式需要改动的地方太多,实在不想改了,对不住,请见原文。
本人自认为此文章写的还算不错。
安装 Powerlevel9k
涉及两个步骤:
- 安装 Powerline 字体
- 安装 Powerlevel9k 主题
安装 Powerline 字体:
寻找字体是一件很伤心的事情,这里我推荐Ubuntu Mono Nerd Font Complete (Win用户选择带有Windows的字体文件)、 DejaVu Sans Mono Nerd Font Complete 、 (等距)更纱黑体
通常配置文件中会有这么一项配置 POWERLEVEL9K_MODE
,它的值受字体和字体安装的方式的影响,值与字体之间不对应显示时可能会达不到效果:
POWERLEVEL9K_MODE='nerdfont-complete'
对应的关系如下:
Configuration valueDescriptiondefault对于常规的 powerline字体(如果您需要一个图标较少的终端)awesome-fontconfig
If you use Awesome Terminal Fonts with fontconfig
, without the named icons.awesome-mapped-fontconfig
If you use Awesome Terminal Fonts with fontconfig
, including named icons (e.g. $CODEPOINT_OF_AWESOME_CHECK
).awesome-patched
If you use Awesome Terminal Fonts with a pre-patched font.nerdfont-complete
If you use Nerdfonts in complete
variant.(选择这个简单的)nerdfont-fontconfig
If you use Nerdfonts in a fontconfig
setup.
我们选择简单一点的 nerdfont-complete
,在 Linux中我们这样操作:
# Linux 中:
mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts
curl -fLo "DejaVu Sans Mono Nerd Font Complete.ttf" https://github.com/ryanoasis/nerd-fonts/blob/master/patched-fonts/DejaVuSansMono/Regular/complete/DejaVu%20Sans%20Mono%20Nerd%20Font%20Complete.ttf
Windows中我们直接下载字体文件,双击安装即可。
如果需要使用fontconfig
程序进行安装,那么先通过apt-get install fontconfig
安装 fontconfig 程序,再点击上面字体链接查看如何安装该字体的说明。
安装 P9k 主题:
- 安装 zsh
sudo apt install zsh - 安装 Oh-My-Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" - 安装P9k
git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k - 配置 oh-my-zsh :编辑
~/.zshrc
修改zsh的主题
ZSH_THEME="powerlevel9k/powerlevel9k"
修改终端字体: 修改终端所使用的字体为 你安装的某 nerd font 字体。
重启终端: 修改完成 重启终端或 source ~/.zshrc 使配置生效。
P9k要求,zsh 最小版本: 5.1
提示符定制方式
提示符由最基本的 分段 (segments) 构成
我们直接在 zsh 的配置文件 ~/.zshrc
中对其进行定制,下面是一个简单配置
# 配置zsh 当前使用的主题
ZSH_THEME="powerlevel9k/powerlevel9k"
# P9k 使用的模式
POWERLEVEL9K_MODE='nerdfont-complete'
# 显示在左边的提示元素(分段位于括号中并以空格隔开)
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir dir_writable vcs vi_mode)
# 显示在右边的提示元素(分段)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status)
# 左侧提示符是否显示两行(光标显示在下一行)
POWERLEVEL9K_PROMPT_ON_NEWLINE=true
{{% notice note %}} 如有问题请参考后文给出的故障排查链接 {{% /notice %}}
寻找可用分段
系统状态:
- background_jobs - 后台作业的指示器
- battery - 电池状态
- context - 您的用户名和主机,基于 $USER 和 SSH 状态的条件化
- date - 系统日期
- dir - 你当前的工作目录
- dir_writable - 如果您对当前文件夹没有写权限,则显示锁定图标
- disk_usage - 当前分区的磁盘使用情况
- history - 当前行的命令号
- host - 您当前的主机名
- ip - 显示当前 IP 地址
- vpn_ip - 显示当前的 VPN 地址
- public_ip - 显示你的公共IP地址
- load - 机器的平均负载
- os_icon - 操作系统图标
- ram - 显示空闲内存
- root_indicator - 指示用户是否具有超级用户状态
- status - 前一个命令的返回代码
- swap - 打印当前交换文件大小
- time - 系统时间
- user - 你现在的用户名
- vi_mode - 提示符的 Vi 编辑模式 (正常 | 插入)
- ssh - 指示您是否处于 SSH 会话中
开发环境部分:
- vcs - git 存储库相关信息
编程语言相关:
- GoLang Segments:
- go_version - Go版本号
- Javascript / Node.js Segments:
- node_version - Node.js 版本号
- nodeenv - 显示 node 版本和环境
- nvm - 略
- PHP Segments:
- php_version - 显示当前的 PHP 版本
- 略
- Python Segments:
- 略
- Java Segments:
- java_version - 显示当前的 Java 版本
Cloud Segments:
- AWS Segments:
aws
- The current AWS profile, if active.aws_eb_env
- The current Elastic Beanstalk Environment.
docker_machine
- The current Docker Machine.kubecontext
- The current context of yourkubectl
configuration.dropbox
- Indicates Dropbox directory and syncing status usingdropbox-cli
其他:
- custom_command - 创建一个自定义段来显示任意命令的输出
- command_execution_time - 显示当前命令执行时间
- todo - Shows the number of tasks in your todo.txt tasks file.
- detect_virt - Virtualization detection with systemd
- newline - Continues the prompt on a new line. - 在新行上继续提示符
- openfoam - 显示当前 sourced 环境
提示符基本定制
让提示符显示两行:
# 左侧提示符是否显示两行(光标显示在下一行)
POWERLEVEL9K_PROMPT_ON_NEWLINE=true
# 右侧提示符是否显示两行
POWERLEVEL9K_RPROMPT_ON_NEWLINE=true
![845c86b95bb2e7e2a34d7b773f9efe83.png](https://i-blog.csdnimg.cn/blog_migrate/018769b5fe0a1ce31f6dd05141c676e3.png)
也可以使用 newline
分段将分段列表分成多行,比如
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir newline vcs)
设置提示符前缀,比如
# 第一行左提示符前缀(一般设置为空)
POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX="↱"
# 最后一行左提示符前缀符号(一般设置为 $)
POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="↳ "
在提示符上方插入一空行以保持间距:
POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
禁用右侧提示符:
POWERLEVEL9K_DISABLE_RPROMPT=true
Stylizing Your Prompt · Powerlevel9k/powerlevel9k Wiki 必看
获取和设置颜色值
直接在终端运行下面的语句,获取颜色值(颜色数值)
for code ({000..255}) print -P -- "$code: %F{$code}最左侧三位数字即颜色值Text Color%f"
一些终端仿真器允许您自定义终端使用的颜色。 P9k 提供了两个命令,您可以使用它们打印出模拟器使用的 颜色名称 和 颜色数值,以帮助您进行自定义;也可以直接使用获取到的 颜色名称
getColorCode background
getColorCode foreground
设置颜色值:
POWERLEVEL9K_分段名称_FOREGROUND='red'
POWERLEVEL9K_分段名称_BACKGROUND='blue'
也可以更改 P9k 的整体配色方案,比如设置为 light :
POWERLEVEL9K_COLOR_SCHEME='light'
背景色值设置为
none
表示不需要背景
将两个分段连接在一起
可以为分段添加 _joined
后缀的形式,将两个分段显示为一个;添加了 _joined
后缀的分段(即使是自定义的分段)将会和它前一个分段连接在一起。请确保这两个分段都能正常显示,否则,可能会得到不想要的结果。
例如,如果要在右侧提示符中将status
和background_jobs
连接在一起,可以这样设置
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status background_jobs_joined)
设置图标
可以通过使用 p9k 提供的下例方法,列出主题中包含的所有图标的名称
get_icon_names
例如,如果您想对分段分隔符使用不同的字形,则可以使用以下方法轻松实现:
POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR=$'uE0B1'
POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR=$'uE0B3'
其中 $
环境变量前缀,uE0B1
为该图标的码点。
您可以使用相同的方法在提示符中添加或删除间距。例如,如果您想删除 vcs段中 "分支" 图标之后的空格,则只需在该图标的码点之后添加一个空格即可(没有测试,这是删除还是增加?):
POWERLEVEL9K_VCS_BRANCH_ICON=$'uF126 '
比如系统图标经常会显示不下,可以通过添加空格的方式来增加间距
POWERLEVEL9K_WINDOWS_ICON:=' '
POWERLEVEL9K_LINUX_UBUNTU_ICON=' '
使用icons_test
分段,测试图标上色效果,它将会列出所有上色的图标:
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(icons_test)
定制分段
你也可以修改分段的默认样式和显示格式。
更改最左侧的符号:
POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=""
POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="▶ "
POWERLEVEL9K_DISABLE_RPROMPT=true
POWERLEVEL9K_PROMPT_ON_NEWLINE=true
定制日期 date:
变量默认值描述POWERLEVEL9K_DATE_FORMAT%D{%d.%m.%y}
使用 Zsh 时间格式
定制时间time:
变量默认值描述POWERLEVEL9K_TIME_FORMAT'H:M:S'
使用Zsh 时间格式
示列:
# Reversed time format
POWERLEVEL9K_TIME_FORMAT='%D{%S:%M:%H}'
# Output time, date, and a symbol from the "Awesome Powerline Font" set
POWERLEVEL9K_TIME_FORMAT="%D{%H:%M:%S uE868 %d.%m.%y}"
主机名 host:
# 有些主机名很长并以.分隔;默认为 %m ,数字表示要显示的段数,负数表示只显示最后一段
POWERLEVEL9K_HOST_TEMPLATE="%2m"
# 主机图标(默认情况)
# 本地主机图标
POWERLEVEL9K_HOST_ICON="uF109 "
# SSH远程主机图标
POWERLEVEL9K_SSH_ICON="uF489 "
dir目录:
对于某些字体,可以在特定目录下还可显示特定目录图标,比如在home目录显示一个房子。要关闭这些图标可以见下面的变量设置为空即可:
POWERLEVEL9K_HOME_ICON=''
POWERLEVEL9K_HOME_SUB_ICON=''
POWERLEVEL9K_FOLDER_ICON=''
POWERLEVEL9K_ETC_ICON=''
您可以截断过长的路径将其限制在一定长度之内:
变量默认值描述POWERLEVEL9K_DIR_PATH_ABSOLUTE
None如果设置为true
将使用绝对路径而不是主文件夹缩写~POWERLEVEL9K_SHORTEN_DIR_LENGTH2
如果您的缩短策略是整个目录,则此字段决定在末尾留下多少个目录。 如果缩短策略是通过字符计数,则此字段决定允许每个目录字符串使用多少个字符POWERLEVEL9K_SHORTEN_STRATEGY
None如何截断目录字符串。(东西太多,请查看文档)POWERLEVEL9K_SHORTEN_DELIMITER..
要在截断的字符串中使用的分隔符。 可以是任何字符串,也可以是一个空字符串
如果要自定义目录分隔符,可以设置:
# Double quotes are important here!
POWERLEVEL9K_DIR_PATH_SEPARATOR="%F{red} $(print_icon 'LEFT_SUBSEGMENT_SEPARATOR') %F{black}"
powerlevel9k/segments
参考他人的配置
参考这里列出的效果图和配置信息:Show Off Your Config
同时注意,终端类型、终端字体、终端配主题
这是我的个人配置效果
配置文件见我的 : Powerlevel9k - .zshrc
几个不错的配置:
- P9KGT 配置方式值得参考
故障排除
如果遇到问题,可查看此处的故障排查:Troubleshooting · Powerlevel9k/powerlevel9k Wiki
在我当前环境(WSL+ Oh-My-Zsh + Cmder)中,右侧提示符只能设置一些简单的分段,并且分段会被截断一部分,右侧如果放长一点的分段就会导致右侧提示符溢出到下一行。
{{% notice note %}} 注意: 配置时 =
等号两边不能有空格。 {{% /notice %}}
启用和禁用 Powerlevel9k
禁用 P9k
$ prompt_powerlevel9k_teardown
然后可以这样启用 P9k
$ prompt_powerlevel9k_setup
另外还有个:Powerlevel10k: A Zsh theme