Powerlevel10k 是 Zsh 的主题。它强调速度、灵活性和开箱即用的体验。
exec zsh
重新启动 Zsh。p10k configure
。 输入p10k configure
直接从终端访问内置配置向导。
除 Pure 之外的所有样式在功能上都是等效的。它们显示相同的信息,仅在表示方式上有所不同。
配置向导根据您的偏好创建~/.p10k.zsh
。可以通过编辑此文件来完成其他提示自定义。它有大量注释可以帮助您浏览配置选项。
提示:在运行p10k configure
之前安装推荐的字体以解锁所有提示样式。
常问问题:
故障排除:
当您按ENTER时,下一个提示会立即出现。使用 Powerlevel10k 不会出现提示延迟。如果您在 Raspberry Pi 上安装 Cygwin, cd
到 Linux Git 存储库并激活足够的提示段以填充屏幕两侧的四个提示行...等等,这太疯狂了,没有人这样做过。恐怕也是不可能的。重点是,无论您做什么,Powerlevel10k 提示总是很快!
请注意每个命令的效果如何立即反映在下一个提示中。
命令 | 提示指示器 | 意义 |
---|---|---|
timew start hack linux | ⌚ hack linux | 时间战士中启用时间跟踪 |
touch xy | ?2 | Git 存储库中有 2 个未跟踪的文件 |
rm COPYING | !1 | Git 存储库中 1 个未暂存的更改 |
echo 3.7.3 >.python-version | ? 3.7.3 | pyenv 中当前的 python 版本 |
其他能够显示相同信息的 Zsh 主题要么会产生提示滞后,要么会打印不反映系统当前状态的提示,然后稍后刷新。使用 Powerlevel10k,您可以获得快速提示和最新信息。
常见问题解答:真的很快吗?
Powerlevel10k 理解所有 Powerlevel9k 配置参数。
从 Powerlevel9k 迁移到 Powerlevel10k 的过程非常简单。您的所有POWERLEVEL9K
配置参数仍然有效。提示看起来和以前一样(几乎),但速度会快得多(当然)。
常问问题:
Powerlevel10k 可以产生与 Pure 相同的提示。输入p10k configure
并选择Pure风格。
在使用 Pure 风格时,您仍然可以使用 Powerlevel10k 功能,例如瞬态提示或即时提示。
要自定义提示,请编辑~/.p10k.zsh
。 Powerlevel10k 无法识别 Pure 配置参数,因此您需要使用POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3
而不是PURE_CMD_MAX_EXEC_TIME=3
等。所有相关参数都在~/.p10k.zsh
中。该文件有大量注释可以帮助您浏览它。
常见问题解答:配置向导中最好的提示样式是什么?
如果您的~/.zshrc
加载了许多插件,或者可能只是加载了一些速度较慢的插件(例如 pyenv 或 nvm),您可能已经注意到 Zsh 需要一些时间才能启动。
Powerlevel10k 可以消除 Zsh 启动延迟,即使它不是由主题引起的。
此功能称为即时提示。您需要通过p10k configure
或手动显式启用它。它的作用正如其所言——在 Zsh 启动时立即打印提示,允许您在插件仍在加载时开始输入。
其他主题会增加Zsh 启动延迟——有些会增加很多,有些则只会增加一点点。 Powerlevel10k 彻底删除了它。
如果您对Instant Prompt 的工作原理感到好奇,请参阅 zsh-bench 中的此部分。
常见问题:如何配置即时提示?
某些命令的行为取决于全局环境。例如, kubectl run ...
在当前 kubernetes 上下文定义的集群上运行映像。如果您经常更改“prod”和“testing”之间的上下文,您可能希望在 Zsh 提示符中显示当前上下文。如果您对 AWS、Azure 和 Google Cloud 凭据执行同样的操作,提示将会变得非常拥挤。
输入“按命令显示” 。此功能使提示段仅在与您当前键入的命令相关时才出现。
默认情况下,通过p10k configure
enable show on 命令为多个提示段创建的配置。这是 kubernetes 上下文的相关参数:
# Show prompt segment "kubecontext" only when the command you are typing invokes one of these tools.
typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND= ' kubectl|helm|kubens '
要自定义何时显示不同的提示段,请打开~/.p10k.zsh
,搜索SHOW_ON_COMMAND
并删除这些参数以无条件显示受影响的段,或更改它们的值。
当通过p10k configure
启用瞬态提示时,Powerlevel10k 将在接受命令行时修剪每个提示。
瞬时提示使从终端回滚复制粘贴一系列命令变得更加容易。
提示:如果启用瞬时提示,请利用两行提示。您将获得用于键入命令的额外空间的好处,而不会出现回滚密度降低的常见缺点。稀疏提示(提示前有一个空行)与瞬态提示结合使用也非常有效。
当前工作目录可能是最重要的提示段。 Powerlevel10k 竭尽全力突出显示其重要部分,并在水平空间变得稀缺时以最小的信息损失截断它。
当完整目录不适合时,最左边的段将被截断为其最短的唯一前缀。在截屏视频中, ~/work
变为~/wo
。它不能被截断为~/w
因为它会不明确(记录会话时有~/wireguard
)。下一部分 - projects
- 变成p
,因为~/work/
中没有其他以p
开头的内容。
目录段以三种颜色之一显示:
提示:如果您复制粘贴截断的目录并按TAB 键,它将完成原始目录。
故障排除:使用Rainbow风格时,很难在提示中看到目录。
Powerlevel10k 可以配置为看起来像任何其他 Zsh 主题。
内置 Pure、Powerlevel9k 和 robbyrussell 仿真。要模拟其他主题的外观,您需要编写合适的配置文件。最好的方法是运行p10k configure
,选择最接近您目标的样式,然后编辑~/.p10k.zsh
。
Powerlevel10k 的全系列外观涵盖斯巴达:
到荒谬的靡:
Powerlevel10k 带有数十个内置的高质量提示段,可以显示来自各种来源的信息。当您运行p10k configure
并选择除 Pure 之外的任何样式时,默认情况下会启用其中许多段,而其他段则可以通过打开~/.p10k.zsh
并取消注释来手动启用。您可以根据需要启用任意数量的分段。它不会减慢您的提示符或 Zsh 启动速度。
部分 | 意义 |
---|---|
anaconda | conda 的虚拟环境 |
asdf | 来自 asdf 的工具版本 |
aws | 亚马逊简介 |
aws_eb_env | AWS弹性beanstalk环境 |
azure | 天蓝色帐户名 |
background_jobs | 存在后台作业 |
battery | 内部电池状态和充电水平(是的,确实包括电池) |
command_execution_time | 最后一个命令的持续时间(墙上时间) |
context | 用户@主机名 |
cpu_arch | CPU架构 |
dir | 当前工作目录 |
direnv | 目录状态 |
disk_usage | 磁盘使用情况 |
dotnet_version | 点网版本 |
fvm | 来自 fvm 的 flutter 环境 |
gcloud | 谷歌云cli帐户和项目 |
goenv | 来自 goenv 的 go 环境 |
google_app_cred | 谷歌应用程序凭据 |
go_version | 去版本 |
haskell_stack | 堆栈中的 haskell 版本 |
ip | 指定网络接口的 IP 地址和带宽使用情况 |
java_version | java版本 |
jenv | 来自 jenv 的 java 环境 |
kubecontext | 当前的 Kubernetes 上下文 |
laravel_version | laravel php 框架版本 |
load | CPU负载 |
luaenv | 来自 luaenv 的 lua 环境 |
midnight_commander | 午夜指挥官炮弹 |
nix_shell | nix shell 指示器 |
nnn | nnn 外壳 |
lf | 外壳 |
chezmoi_shell | 切兹莫伊外壳 |
nodeenv | 来自nodeenv的node.js环境 |
nodenv | 来自nodenv的node.js环境 |
node_version | Node.js 版本 |
nordvpn | NordVPN 连接状态 |
nvm | 来自 nvm 的 Node.js 环境 |
os_icon | 您的操作系统徽标(macOS 为 apple,debian 为 swirl 等) |
package | 来自 package.json 的name@version |
per_directory_history | Oh My Zsh 每个目录历史本地/全局指示器 |
perlbrew | 来自 perlbrew 的 Perl 版本 |
phpenv | 来自 phpenv 的 php 环境 |
php_version | PHP版本 |
plenv | 来自 plenv 的 Perl 环境 |
prompt_char | 多功能提示符号;根据 vi 模式而变化: ❯ 、 ❮ 、 V 、 ▶ 分别表示插入、命令、可视和替换模式;出错时变为红色 |
proxy | 系统范围的http/https/ftp代理 |
public_ip | 公共IP地址 |
pyenv | 来自 pyenv 的 python 环境 |
ram | 空闲内存 |
ranger | 游侠壳 |
yazi | 睚眦贝壳 |
rbenv | 来自 rbenv 的 ruby 环境 |
rust_version | rustc版本 |
rvm | RVM 的 ruby 环境 |
scalaenv | 来自 scalaenv 的 scala 版本 |
status | 最后一个命令的退出代码 |
swap | 使用过的交换 |
taskwarrior | 任务战士任务数 |
terraform | 地形工作区 |
terraform_version | 地形版本 |
time | 当前时间 |
timewarrior | 时间战士追踪状态 |
todo | 待办事项 |
toolbox | 工具箱名称 |
vcs | Git 存储库状态 |
vim_shell | vim shell ( :sh ) |
virtualenv | 来自 venv 的 python 环境 |
vi_mode | vi 模式(如果您启用了prompt_char,则不需要此模式) |
vpn_ip | 虚拟专用网络指示器 |
wifi | 无线网络速度 |
xplr | xplr外壳 |
如果没有提示段可以满足您的需要,请实现您自己的提示段。 Powerlevel10k 提供公共 API 来定义分段,其速度和内置分段一样灵活。
在 Linux 上,您可以通过读取/sys/class/thermal/thermal_zone0/temp
来获取当前 CPU 温度。该截屏视频展示了如何定义提示段来显示该值。定义段后,您可以像任何其他段一样使用它。所有标准定制参数都可以开箱即用。
输入p10k help segment
以供参考。
注意:如果您在已初始化的交互式 shell 中修改POWERLEVEL9K_*
参数(而不是编辑~/.p10k.zsh
),则更改可能不会立即生效。要应用修改,请调用p10k reload
。设置POWERLEVEL9K_DISABLE_HOT_RELOAD=false
消除了p10k reload
的必要性,但会导致提示速度稍慢。
提示:在您自己的段名称前加上my_
前缀,以避免与 Powerlevel10k 的未来版本发生冲突。
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~ /powerlevel10k
echo ' source ~/powerlevel10k/powerlevel10k.zsh-theme ' >> ~/.zshrc
中国用户可以使用gitee.com上的官方镜像来更快地下载。
中国用户可以使用gitee.com上的官方镜像加速下载。
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ~ /powerlevel10k
echo ' source ~/powerlevel10k/powerlevel10k.zsh-theme ' >> ~/.zshrc
这是最简单的安装方式,即使您使用插件管理器也可以使用。只需确保在插件管理器中禁用当前主题即可。请参阅故障排除以获取帮助。
克隆存储库:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM :- $HOME / .oh-my-zsh / custom} /themes/powerlevel10k
中国用户可以使用gitee.com上的官方镜像来更快地下载。
中国用户可以使用gitee.com上的官方镜像加速下载。
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM :- $HOME / .oh-my-zsh / custom} /themes/powerlevel10k
打开~/.zshrc
,找到设置ZSH_THEME
的行,并将其值更改为"powerlevel10k/powerlevel10k"
。
将zstyle :prezto:module:prompt theme powerlevel10k
添加到~/.zpreztorc
。
将zmodule romkatv/powerlevel10k --use degit
添加到~/.zimrc
并运行zimfw install
。
将antibody bundle romkatv/powerlevel10k
添加到~/.zshrc
。
将romkatv/powerlevel10k
添加到~/.zsh_plugins.txt
。
将antigen theme romkatv/powerlevel10k
添加到~/.zshrc
。确保在其后的某个地方antigen apply
。
添加zplug romkatv/powerlevel10k, as:theme, depth:1
到~/.zshrc
。
将zgen load romkatv/powerlevel10k powerlevel10k
添加到~/.zshrc
。
添加zplugin ice depth=1; zplugin light romkatv/powerlevel10k
到~/.zshrc
。
depth=1
冰的使用是可选的。 Powerlevel10k 既不推荐也不官方支持其他类型的冰。
添加zinit ice depth=1; zinit light romkatv/powerlevel10k
到~/.zshrc
。
depth=1
冰的使用是可选的。 Powerlevel10k 既不推荐也不官方支持其他类型的冰。
添加zi ice depth=1; zi light romkatv/powerlevel10k
到~/.zshrc
。
depth=1
冰的使用是可选的。 Powerlevel10k 既不推荐也不官方支持其他类型的冰。
将plug "romkatv/powerlevel10k"
添加到~/.zshrc
。
brew install powerlevel10k
echo " source $( brew --prefix ) /share/powerlevel10k/powerlevel10k.zsh-theme " >> ~/.zshrc
yay -S --noconfirm zsh-theme-powerlevel10k-git
echo ' source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme ' >> ~/.zshrc
上面引用的 zsh-theme-powerlevel10k-git 是官方的 Powerlevel10k 包。
apk add zsh zsh-theme-powerlevel10k
mkdir -p ~ /.local/share/zsh/plugins
ln -s /usr/share/zsh/plugins/powerlevel10k ~ /.local/share/zsh/plugins/
请按照本页上的说明进行操作。
第一次运行时,Powerlevel10k 配置向导将询问您几个问题并配置提示。如果它没有自动触发,请输入p10k configure
。配置向导根据您的偏好创建~/.p10k.zsh
。可以通过编辑此文件来完成其他提示自定义。它有大量注释可以帮助您浏览配置选项。
常问问题:
故障排除:
如果您以前使用过Powerlevel9k,请不要删除配置选项。 Powerlevel10k 将拾取它们并为您提供与您习惯的相同的提示 UI。请参阅 Powerlevel9k 兼容性。
常问问题:
故障排除:与 Powerlevel9k 相比,提示中存在多余或缺失的空格。
Powerlevel10k 不需要自定义字体,但可以利用它们(如果可用)。它与 Nerd Fonts、Source Code Pro、Font Awesome、Powerline 甚至默认系统字体配合良好。仅当使用 Nerd Fonts 时,样式选项的完整选择才可用。
?推荐字体:为 Powerlevel10k 修补的 Meslo Nerd 字体。 ?
由 Jim Lyles 为 Bitstream 设计的华丽等宽字体,由该公司为 Apple 定制,由 André Berg 进一步定制,最后由您真正使用最初由 Nerd Fonts 的 Ryan L McIntyre 开发的定制脚本进行修补。包含 Powerlevel10k 可能需要的所有字形和符号。在所有主要操作系统的数十个不同终端上经过了实战测试。
常见问题解答:推荐字体是如何创建的?
如果您使用的是 iTerm2 或 Termux, p10k configure
可以为您安装推荐的字体。当询问是否安装Meslo Nerd Font时,只需回答Yes
即可。
如果您使用不同的终端,请继续手动安装字体。 ?
MesloLGS NF
字体可用于系统上的所有应用程序。p10k configure
并在询问是否安装Meslo Nerd Font时回答Yes
。或者,打开iTerm2 → Preferences → Profiles → Text并将Font设置为MesloLGS NF
。MesloLGS NF
系列。module.exports.config
下的fontFamily
的值更改为MesloLGS NF
。terminal.integrated.fontFamily
,并将下面的值设置为MesloLGS NF
。请参阅此屏幕截图以了解其外观,或查看此问题以获取更多信息。MesloLGS NF Regular
。MesloLGS NF Regular
。MesloLGS NF Regular
。MesloLGS NF
。MesloLGS NF
。MesloLGS NF
。MesloLGS NF
。p10k configure
并在询问是否安装Meslo Nerd Font时回答Yes
。config
,转到外观,点击添加新字体,点击打开图库,选择MesloLGS NF.css ,点击导入并在主页视图中键入exit
以重新加载字体。MesloLGS NF
。MesloLGS NF Regular
。单击“关闭”退出“首选项”对话框。MesloLGS NF Regular
。单击“关闭”退出“首选项”对话框。MesloLGS NF
。如果您有会话,则需要通过设置→右键单击单个会话→编辑会话→终端设置→字体设置来更改每个会话中的字体。MesloLGS NF Regular
。要更改远程主机连接的字体,请转至Preferences → Terminal Options → Look and Feel并将Terminal UI下的Font:更改为MesloLGS NF Regular
。MesloLGS NF
字体。MesloLGS NF Regular
。MesloLGS NF
,然后单击“确定” 。单击“确定”保存配置文件。选择新的配置文件并单击设为默认值。~/.config/alacritty/alacritty.toml
并向其中添加以下部分: [ font . normal ]
family = " MesloLGS NF "
~/.config/foot/foot.ini
并向其中添加以下部分: font =MesloLGS NF: size =12
~/.config/kitty/kitty.conf
并向其中添加以下行: font_family MesloLGS NF
MesloLGS NF
。需要 PuTTY 版本 >= 0.75。$HOME/.config/wezterm/wezterm.lua
并添加以下内容: local wezterm = require ' wezterm ' ;
return {
font = wezterm . font ( " MesloLGS NF " ),
}
~/.Xresources
并向其中添加以下行: URxvt.font: xft:MesloLGS NF:size=11
xrdb ~/.Xresources
重新加载它。新配置将应用于所有新终端。~/.Xresources
并向其中添加以下行: xterm*faceName: MesloLGS NF
xrdb ~/.Xresources
重新加载它。新配置将应用于所有新终端。~/.config/zed/settings.json
并将terminal.font_family
设置为"MesloLGS NF"
。 {
"terminal" : {
"font_family" : "MesloLGS NF"
} ,
// Other settings.
}
'MesloLGS NF'
(包括引号),并将自定义 CSS(内联文本)设置为以下内容: @font-face {
font-family : "MesloLGS NF" ;
src : url ( "https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Regular.ttf" );
font-weight : normal;
font-style : normal;
}
@font-face {
font-family : "MesloLGS NF" ;
src : url ( "https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Bold.ttf" );
font-weight : bold;
font-style : normal;
}
@font-face {
font-family : "MesloLGS NF" ;
src : url ( "https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Italic.ttf" );
font-weight : normal;
font-style : italic;
}
@font-face {
font-family : "MesloLGS NF" ;
src : url ( "https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Bold%20Italic.ttf" );
font-weight : bold;
font-style : italic;
}
~/.config/deepin/deepin-terminal/config.conf
并添加以下部分: [basic.interface.font]
value = " MesloLGS NF "
p10k configure
生成新的~/.p10k.zsh
。旧配置可能无法与新字体配合使用。使用不同的终端并知道如何为其设置字体?通过发送 PR 来扩展列表来分享您的知识!
在 Docker 中尝试 Powerlevel10k。您可以在尝试主题时安全地对文件系统进行任何更改。一旦退出 Zsh,容器就会被删除。
docker run -e TERM -e COLORTERM -e LC_ALL=C.UTF-8 -it --rm alpine sh -uec '
apk add git zsh nano vim
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
echo "source ~/powerlevel10k/powerlevel10k.zsh-theme" >>~/.zshrc
cd ~/powerlevel10k
exec zsh '
提示:在运行 Docker 命令之前安装推荐的字体以访问所有提示样式。
提示:在 Docker 中运行p10k configure
来尝试不同的提示样式。
Powerlevel10k 在 MIT 许可证下发布。
$HOME/.git
中的 Git 状态未在提示中显示?更新 Powerlevel10k 的命令取决于它的安装方式。
安装 | 更新命令 |
---|---|
手动的 | git -C ~/powerlevel10k pull |
哦我的Zsh | git -C ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k pull |
普雷斯托 | zprezto-update |
齐姆 | zimfw update |
抗原 | antigen update |
解毒剂 | antidote update |
兹插头 | zplug update |
兹根 | zgen update |
插件 | zplugin update |
齐尼特 | zinit update |
子 | zi update |
电击 | zap update |
自制 | brew update && brew upgrade |
架构Linux | yay -S --noconfirm zsh-theme-powerlevel10k-git |
阿尔卑斯Linux | apk update && apk upgrade |
重要提示:更新 Powerlevel10k 后重新启动 Zsh。不要使用source ~/.zshrc
。
从~/.zshrc
中删除所有对“p10k”的引用。您可能会在顶部看到此片段:
if [[ -r " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh " ]] ; then
source " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh "
fi
底部是这样的:
[[ ! -f ~ /.p10k.zsh ]] || source ~ /.p10k.zsh
这些是由配置向导添加的。删除它们。
从~/.zshrc
、 ~/.zpreztorc
和~/.zimrc
中删除所有对“powerlevel10k”的引用(其中一些文件可能会丢失 - 这是正常的)。这些引用是您在安装 Powerlevel10k 时手动添加的。如果需要提醒,请参阅安装说明。
验证对“p10k”和“powerlevel10k”的所有引用均已从~/.zshrc
、 ~/.zpreztorc
和~/.zimrc
中消失。
grep -E ' p10k|powerlevel10k ' ~ /.zshrc ~ /.zpreztorc ~ /.zimrc 2> /dev/null
如果此命令产生输出,则仍然引用“p10k”或“powerlevel10k”。你需要删除它们。
删除Powerlevel10k配置文件。该文件由配置向导创建,可能包含您自己的手动编辑。
rm -f ~ /.p10k.zsh
删除Powerlevel10k源文件。这些文件已在您安装 Powerlevel10k 时下载。删除它们的命令取决于您选择的安装方法。如果需要提醒,请参阅安装说明。
安装 | 卸载命令 |
---|---|
手动的 | rm -rf ~/powerlevel10k |
哦我的Zsh | rm -rf -- ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k |
普雷斯托 | 不适用 |
齐姆 | zimfw uninstall |
抗原 | antigen purge romkatv/powerlevel10k |
解毒剂 | antidote purge romkatv/powerlevel10k |
兹插头 | zplug clean |
兹根 | zgen reset |
插件 | zplugin delete romkatv/powerlevel10k |
齐尼特 | zinit delete romkatv/powerlevel10k |
子 | zi delete romkatv/powerlevel10k |
电击 | zsh -ic 'zap clean' |
自制 | brew uninstall powerlevel10k |
架构Linux | yay -R --noconfirm zsh-theme-powerlevel10k-git |
阿尔卑斯Linux | apk del zsh-theme-powerlevel10k |
重新启动 Zsh。不要使用source ~/.zshrc
。
删除 Powerlevel10k 缓存文件。
rm -rf -- " ${XDG_CACHE_HOME :- $HOME / .cache} " /p10k- * (N) " ${XDG_CACHE_HOME :- $HOME / .cache} " /gitstatus
uname -sm | tr ' [A-Z] ' ' [a-z] '
target_uname
的值替换为上一个命令的输出后,在连接到 Internet 的计算机上运行以下命令: target_uname= " replace this with the output of the previous command "
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~ /powerlevel10k
GITSTATUS_CACHE_DIR= " $HOME " /powerlevel10k/gitstatus/usrbin ~ /powerlevel10k/gitstatus/install -f -s " ${target_uname % * } " -m " ${target_uname #* } "
~/powerlevel10k
从连接到 Internet 的计算机复制到未访问 Internet 的计算机。source ~/powerlevel10k/powerlevel10k.zsh-theme
添加到没有 Internet 访问的机器上的~/.zshrc
中: echo ' source ~/powerlevel10k/powerlevel10k.zsh-theme ' >> ~/.zshrc
~/.zshrc
设置了ZSH_THEME
,请删除该行。 sed -i.bak ' /^ZSH_THEME=/d ' ~ /.zshrc
要更新,请删除两台计算机上的~/powerlevel10k
并重复步骤 1-3。
寻求帮助和报告错误的最佳方式是提出问题。
Gitter 是另一种选择。
如果其他方法均失败,请发送电子邮件至 [email protected]。
如有必要,请使用此 PGP 密钥加密您的通信。
Powerlevel10k 定义了提示符,仅此而已。它设置提示相关的选项以及参数PS1
和RPS1
。
屏幕截图中突出显示区域内的所有内容均由 Powerlevel10k 生成。 Powerlevel10k 无法控制这些区域之外的终端内容或颜色。
Powerlevel10k 不影响:
ls
使用的颜色。git
命令的行为。PS1
和RPS1
以外的参数。p10k
。 # Add powerlevel10k to the list of Oh My Zsh themes.
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM /themes/powerlevel10k
# Replace ZSH_THEME="powerlevel9k/powerlevel9k" with ZSH_THEME="powerlevel10k/powerlevel10k".
sed -i.bak ' s/powerlevel9k/powerlevel10k/g ' ~ /.zshrc
# Restart Zsh.
exec zsh
p10k configure
并选择您最喜欢的提示样式。有关的:
是的。请参阅 zsh-bench 或与 Powerlevel9k 和 Spaceship 的直接比较。
请参阅即时提示以了解即时提示。本节介绍如何启用和配置它,并列出您应该注意的注意事项。
可以通过p10k configure
或通过在~/.zshrc
顶部手动添加以下代码片段来启用即时提示:
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh " ]] ; then
source " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh "
fi
逐字复制这些行很重要。不要用其他东西替换source
,不要调用zcompile
,不要重定向输出等。
启用即时提示后,在 Zsh 初始化期间,标准输入将重定向到/dev/null
,并且带有标准错误的标准输出将重定向到临时文件。一旦 Zsh 完全初始化,标准文件描述符将被恢复并打印出临时文件的内容。
使用即时提示时,您应该仔细检查 Zsh 启动时出现的任何输出,因为它可能表明初始化已被即时提示更改,甚至可能被破坏。可能需要控制台输入的初始化代码(例如要求密钥环密码或[y/n]确认)必须移至~/.zshrc
中即时提示序言上方。仅打印到控制台但从不读取的初始化代码将在即时提示下正常工作,尽管通常具有颜色的输出可能会显示为无色。您可以保留它,抑制输出,或将其移至即时提示前导码上方。
以下是~/.zshrc
的示例,在启用即时提示时会中断:
if [[ -r " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh " ]] ; then
source " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh "
fi
keychain id_rsa --agents ssh # asks for password
chatty-script # spams to stdout even when everything is fine
# ...
固定版本:
keychain id_rsa --agents ssh # moved before instant prompt
# OK to perform console I/O before this point.
if [[ -r " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh " ]] ; then
source " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh "
fi
# From this point on, until zsh is fully initialized, console input won't work and
# console output may appear uncolored.
chatty-script > /dev/null # spam output suppressed
# ...
如果POWERLEVEL9K_INSTANT_PROMPT
未设置或设置为verbose
,Powerlevel10k 在初始化期间检测到控制台输出时将打印警告,以引起对潜在问题的注意。您可以使用POWERLEVEL9K_INSTANT_PROMPT=quiet
消除此警告(不抑制控制台输出)。如果~/.zshrc
中的某些初始化代码打印到控制台并且无法将其移至即时提示符前导码上方或抑制其输出,则建议这样做。您可以使用POWERLEVEL9K_INSTANT_PROMPT=off
完全禁用即时提示。如果即时提示破坏了 Zsh 初始化并且您不知道如何修复它,请执行此操作。
可以通过运行p10k configure
并在即时提示屏幕上选择适当的选项来更改POWERLEVEL9K_INSTANT_PROMPT
的值。或者,您可以在现有的~/.p10k.zsh
中搜索POWERLEVEL9K_INSTANT_PROMPT
并在那里更改其值。
注意:即时提示需要 Zsh >= 5.4。即使使用旧版本的 Zsh 也可以启用它,但它不会执行任何操作。
常问问题:
如果您启用了即时提示,则~/.zshrc
的顶部应该有这些行:
if [[ -r " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh " ]] ; then
source " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh "
fi
要初始化 direnv,您需要在该块上方添加一行并在其下方添加一行。
(( ${+commands[direnv]} )) && emulate zsh -c " $( direnv export zsh ) "
if [[ -r " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh " ]] ; then
source " ${XDG_CACHE_HOME :- $HOME / .cache} /p10k-instant-prompt- ${( % ) :-% n} .zsh "
fi
(( ${+commands[direnv]} )) && emulate zsh -c " $( direnv hook zsh ) "
相关:使用即时提示时如何导出 GPG_TTY?
您可以像这样在~/.zshrc
中的任何位置导出GPG_TTY
:
export GPG_TTY= $TTY
无论您是否使用即时提示,这都有效。即使您不使用 powerlevel10k,它也能工作。作为额外的好处,它比常用的export GPG_TTY=$(tty)
快得多。
相关:使用即时提示时如何初始化 direnv?
当使用 Lean、Classic 或 Rainbow 风格时,Git 状态可能如下所示:
feature:master wip ⇣42⇡42 ⇠42⇢42 *42 merge ~42 +42 !42 ?42
象征 | 意义 | 来源 |
---|---|---|
feature | 当前分支;如果不在分支上,则替换为#tag 或@commit | git status --ignore-submodules=dirty |
master | 远程跟踪分支;仅在与本地分支不同时显示 | git rev-parse --abbrev-ref --symbolic-full-name @{upstream} |
wip | 最新提交的摘要包含“wip”或“WIP” | git show --pretty=%s --no-patch HEAD |
= | 与遥控器保持最新状态(既不超前也不落后) | git rev-list --count HEAD...@{upstream} |
⇣42 | 远程背后有这么多提交 | git rev-list --right-only --count HEAD...@{upstream} |
⇡42 | 在远程之前有这么多提交 | git rev-list --left-only --count HEAD...@{upstream} |
⇠42 | 推送远程背后的这么多提交 | git rev-list --right-only --count HEAD...@{push} |
⇢42 | 在推送远程之前有这么多提交 | git rev-list --left-only --count HEAD...@{push} |
*42 | 这么多藏品 | git stash list |
merge | 存储库状态 | git status --ignore-submodules=dirty |
~42 | 这么多合并冲突 | git status --ignore-submodules=dirty |
+42 | 这么多阶段性的变化 | git status --ignore-submodules=dirty |
!42 | 这么多未上演的变化 | git status --ignore-submodules=dirty |
?42 | 这么多未跟踪的文件 | git status --ignore-submodules=dirty |
─ | 暂存、未暂存或未跟踪文件的数量未知 | echo $POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY 或git config --get bash.showDirtyState |
相关:如何更改 Git 状态的格式?
要更改 Git 状态的格式,请打开~/.p10k.zsh
,搜索my_git_formatter
并编辑其源代码。
相关:Git状态中的不同符号代表什么意思?
$HOME/.git
中的 Git 状态未在提示中显示?当使用 Lean、Classic 或 Rainbow 风格时, ~/.p10k.zsh
包含以下参数:
# Don't show Git status in prompt for repositories whose workdir matches this pattern.
# For example, if set to '~', the Git repository at $HOME/.git will be ignored.
# Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'.
typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN= ' ~ '
要在提示中查看$HOME/.git
的 Git 状态,请打开~/.p10k.zsh
并删除POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN
。
tl;dr: 当提示中的 Git 状态显示为灰色时,表示 Powerlevel10k 当前正在后台计算最新的 Git 状态。计算完成后,提示将自动刷新。
当您的当前目录位于 Git 存储库中时,Powerlevel10k 会在每个命令后计算最新的 Git 状态。如果存储库很大,或者机器很慢,则此计算可能会花费相当多的时间。如果花费的时间超过 10 毫秒(可通过POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS
配置),Powerlevel10k 将以灰色显示最后一个已知的 Git 状态,并继续在后台计算最新的 Git 状态。计算完成后,Powerlevel10k 会用新信息刷新提示,这次是彩色的 Git 状态。
使用Rainbow样式时,Git 状态在仍在计算时显示为灰底黑字。根据终端调色板,这可能难以阅读。在这种情况下,您可能需要将背景颜色更改为更浅的颜色以提高对比度。为此,请打开~/.p10k.zsh
,搜索POWERLEVEL9K_VCS_LOADING_BACKGROUND
,如果已注释掉则取消注释,然后更改值。
typeset -g POWERLEVEL9K_VCS_LOADING_BACKGROUND=244
输入source ~/.p10k.zsh
将更改应用到当前 Zsh 会话。
相关:如何更改提示颜色?
使用 Lean、Classic 或 Rainbow 风格时,当您以 root 身份或通过 SSH 登录时,提示会显示username@hostname
。当您以普通用户身份登录到本地计算机时,显示username
或hostname
没有什么价值。因此,提示中缺少username@hostname
表明您正在本地工作并且不是 root。不过,您可以更改它。
打开~/.p10k.zsh
。在顶部附近,您可以看到最重要的参数,这些参数定义了提示中显示的段。所有通常有用的提示段都列在其中。其中一些已启用,另一些则被注释掉。其中之一是您感兴趣的。
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
...
context # user@hostname
...
)
搜索context
以查找配置中列出特定于该提示段的参数的部分。您应该看到以下几行:
# Don't show context unless running with privileges or in SSH.
# Tip: Remove the next line to always show context.
typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION=
如果您按照提示操作并删除(或注释掉)最后一行,您将始终在提示中看到username@hostname
。您可以通过调整附近参数的值将格式更改为仅username
,或更改颜色。有很多评论可以帮助您导航。
您还可以将context
移动到POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
中的不同位置,甚至移动到POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
。
提示段可以配置为仅当您正在键入的当前命令调用相关工具时才显示。
# Show prompt segment "kubecontext" only when the command you are typing invokes
# invokes kubectl, helm, or kubens.
typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND= ' kubectl|helm|kubens '
p10k configure
创建的配置可能包含此类参数。要自定义何时显示不同的提示段,请打开~/.p10k.zsh
,搜索SHOW_ON_COMMAND
并删除这些参数或更改它们的值。
您还可以在~/.zshrc
中定义一个函数,以在“always”和“on command”之间切换提示段的显示。这类似于 kube-ps1 中的kubeon
/ kubeoff
。
function kube-toggle() {
if (( ${+POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND} )) ; then
unset POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND
else
POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND= ' kubectl|helm|kubens '
fi
p10k reload
if zle ; then
zle push-input
zle accept-line
fi
}
通过输入kube-toggle
调用此函数。您还可以通过在~/.zshrc
中添加另外两行来将其绑定到键:
zle -N kube-toggle
bindkey ' ^] ' kube-toggle # ctrl-] to toggle kubecontext in powerlevel10k prompt
您可以更改终端使用的调色板或通过 Powerlevel10k 配置参数设置颜色。
如何更改终端调色板(也称为配色方案或主题)取决于您使用的终端类型。查看终端的设置/首选项或查阅文档。
当您更改终端调色板时,它通常仅影响前 16 种颜色,编号从 0 到 15。为了查看 Powerlevel10k 提示上的任何效果,您需要使用利用这些低编号颜色的提示样式。输入p10k configure
并选择Rainbow 、 Lean → 8 色或Pure → Original 。其他样式使用编号较高的颜色,因此它们在任何终端调色板中看起来都相同。
打开~/.p10k.zsh
,搜索“颜色”、“前景”和“背景”并更改适当参数的值。例如,将time
提示段的前景设置为亮红色:
typeset -g POWERLEVEL9K_TIME_FOREGROUND=160
颜色使用 0 到 255 之间的数字指定。0 到 15 之间的颜色在不同的终端中看起来不同。许多终端还支持通过调色板(也称为配色方案或主题)自定义这些颜色。 16 到 255 之间的颜色看起来总是一样的。
输入source ~/.p10k.zsh
将更改应用到当前 Zsh 会话。
要查看不同编号的颜色在终端中的外观,请运行以下命令:
for i in {0..255} ; do print -Pn " %K{ $i } %k%F{ $i } ${(l : 3 :: 0 : )i} %f " ${ ${(M)$((i % 6)) :# 3} : + $' n ' } ; done
如果您的终端支持真彩色,除了编号颜色之外,您还可以使用#RRGGBB
格式的 24 位颜色。
typeset -g POWERLEVEL9K_TIME_FOREGROUND= ' #FF0000 '
有关的:
默认情况下,VSCode 终端可以任意用不同的颜色替换您选择的前景色。可以在 VSCode 设置中关闭此行为。
Powerlevel10k 使用 gitstatus 作为vcs
提示符后面的后端; gitstatus 生成gitstatusd
和zsh
。有关详细信息,请参阅 gitstatus。 Powerlevel10k 还可以生成zsh
来执行计算而不阻塞提示。为了避免安全隐患,这些后台进程不会被不同的交互式 shell 共享。当父zsh
进程终止或运行exec(3)
时,它们会自动终止。
不,无论您采用什么配置,Powerlevel10k 总是很快。如果您在使用 Powerlevel10k 时出现明显的提示延迟,请提出问题。
是的。请参阅 zsh-bench。
经过在 powerlevel9k#1170 中为期一周的讨论后,Powerlevel10k 于 2019 年 3 月从 Powerlevel9k 分叉出来。 Powerlevel9k已经是一个成熟的项目,拥有庞大的用户群,发布周期以月为单位。 Powerlevel10k 被剥离出来,以更快的速度迭代性能改进和新功能。
Powerlevel9k 和 Powerlevel10k 是独立的项目。使用其中一个时,不应安装另一个。应针对您实际使用的项目提出问题。没有人在这两个存储库中拥有提交权。提交给 Powerlevel9k 存储库的所有错误修复和新功能均已移植到 Powerlevel10k。
随着时间的推移,Powerlevel10k 中的几乎所有代码都已被重写。目前 Powerlevel9k 和 Powerlevel10k 的实现之间没有有意义的重叠。
Powerlevel10k 致力于无限期地保持与所有配置的向后兼容性。此承诺涵盖 Powerlevel9k 认可的所有配置参数(请参阅 Powerlevel9k 兼容性)以及只有 Powerlevel10k 理解的其他参数。为了保持一致性,Powerlevel10k 中所有参数的名称均以POWERLEVEL9K_
开头。
几乎。有一些差异。
git
vcs 后端。如果您需要svn
和hg
,请将它们添加到POWERLEVEL9K_VCS_BACKENDS
。这些后端在 Powerlevel10k 中尚未优化,因此启用它们会使提示速度非常慢。POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY=true
。POWERLEVEL9K_MODE
。 Powerlevel9k 会忽略此参数,但 Powerlevel10k 会尊重此参数。如果您希望提示在 Powerlevel10k 中看起来与在 Powerlevel9k 中相同,请删除POWERLEVEL9K_MODE
。ZLE_RPROMPT_INDENT
。因此,与 Powerlevel9k 相比,Powerlevel10k 中的右提示可以在末尾有一个额外的空格。如果您不需要该空间,请设置ZLE_RPROMPT_INDENT=0
。故障排除中的更多详细信息。POWERLEVEL9K_LEGACY_ICON_SPACING=true
以获得与 Powerlevel9k 中相同的间距。故障排除中的更多详细信息。如果您在从 Powerlevel9k 切换到 Powerlevel10k 时发现提示外观有任何其他变化,请提出问题。
有多少人,关于什么是最佳提示的观点就有多少。这主要取决于个人喜好。然而,不同的选择有一些隐藏的含义。
Pure 风格是 Pure Zsh 主题的精确复制。它的存在是为了简化该主题用户的迁移。除非您是其中之一,否则请选择精益风格而不是纯粹风格。
如果要将提示颜色限制为选定的终端调色板(例如Solarized Dark ),请使用Rainbow 、 Lean → 8 颜色或Pure → Original 。其他样式使用固定颜色,因此在任何终端调色板中看起来都相同。
除 Pure 之外的所有样式都可以选择使用ASCII字符集。提示看起来不太漂亮,但会在所有字体和所有语言环境中正确呈现。
如果启用瞬时提示,请利用两行提示。您将获得用于键入命令的额外空间的好处,而不会出现回滚密度降低的常见缺点。让所有命令从相同的偏移量开始也很好。
同样,如果启用瞬态提示,稀疏提示(提示前有一个空行)是一个不错的选择。
如果您使用 vi 键盘映射,请选择其中包含prompt_char
的提示(在向导中显示为绿色❯
)。该符号根据 vi 模式而变化: ❯
、 ❮
、 V
、 ▶
分别表示插入、命令、可视和替换模式。当命令失败时,该符号变为红色。精益风格总是包含prompt_char
。彩虹和经典款式仅在没有左框架的两行配置中具有此功能。
如果您重视水平空间或喜欢极简主义美学:
注意:您可以根据需要多次运行配置向导。输入p10k configure
尝试新的提示样式。
使用这个配置。
您可以下载它,将其保存为~/.p10k.zsh
和source ~/.p10k.zsh
powerlevel10k
~/.zshrc
,或直接从您的克隆p10k-robbyrussell.zsh
。
否。当您点击Enter和输入的命令开始运行时,其错误状态尚不知道,因此无法在提示中显示。命令完成后,错误状态将知道,但不再有可能更新该命令的提示。这就是为什么每个命令的错误状态都会在下一个提示中反映出来的原因。
有关详细信息,请参阅 /r /zsh上的这篇文章。
ZSH 5.3或更新的工作应该工作。快速启动需要ZSH> = 5.4。
所有屏幕截图和动画gif均在GNOME终端记录,并带有推荐的字体和探戈深色调色板,带有自定义背景颜色( #171A1B
而不是#2E3436
两倍的深色)。
ZSH-Syntax-Highlighting提供了语法突出显示。
建议的字体是许多人的产物。它的起源是Bitstream Vera Sans Mono ,它诞生了Menlo ,而Menlo又产生了Meslo 。最后,已将额外的字形添加到Meslo中,并从书呆子字体上分配了脚本。最终字体以Apache许可条款发布。
可以使用以下命令重新创建Meslolgs NF字体(需要git
和docker
):
git clone --depth=1 https://github.com/romkatv/nerd-fonts.git
cd nerd-fonts
./build ' Meslo/S/* '
如果一切顺利,则四个ttf
文件将出现在./out
中。
目前,它既不容易,也不建议打包和分发PowerLevel10k。您无法遵循的说明可以使您在发布新版本的PowerLevel10k时轻松更新软件包。这可能在将来发生变化,但不久。
[oh-my-zsh] theme 'powerlevel10k/powerlevel10k' not found
source ~/.zshrc
之后发生了奇怪的事情[oh-my-zsh] theme 'powerlevel10k/powerlevel10k' not found
打开终端或手动启动ZSH时,您可能会遇到此错误消息:
[oh-my-zsh] theme 'powerlevel10k/powerlevel10k' not found
typeset -p P9K_VERSION
检查是否已加载了PowerLevel10k。typeset -p P9K_VERSION
成功并打印了类似typeset P9K_VERSION=1.19.14
(版本可能不同)之类的东西,请从~/.zshrc
: ZSH_THEME= " powerlevel10k/powerlevel10k "
typeset -p P9K_VERSION
因错误typeset: no such variable: P9K_VERSION
,请运行以下命令: git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM :- $HOME / .oh-my-zsh / custom} /themes/powerlevel10k
exec zsh
重新启动ZSH。如果看起来像常规?
,那是正常的。这意味着您在当前的git存储库中有未跟踪的文件。键入git status
以查看这些文件。您可以更改此符号或完全禁用未跟踪文件的显示。在~/.p10k.zsh
中搜索untracked files
。
常见问题:GIT状态中不同符号是什么意思?
如果您的终端字体缺少某些字形,您还可以在提示中获得一个奇怪的问号。请参阅图标,字形或Powerline符号不会呈现。
重新启动终端,安装推荐的字体并运行p10k configure
。
屏幕截图上有三个缺陷。从左到右:
ZSH主题对终端内容没有直接的像素控制。您在屏幕上看到的所有内容都是由单拼字符制成的。白色Powerline提示段是由白色背景上的文本制成的,其次是U+E0B0(一个正确的三角形)。
如果PowerLevel10k提示在Powerline符号上具有不完美,您将看到与所有PowerLine主题(Agnoster,PowerLevel9K,Powerline等)完全相同的缺陷。
您可以尝试处理以下几件事:
一个更激进的解决方案是切换到没有背景的及时样式。键入p10k configure
并选择精益。这种风格具有现代的轻巧外观。作为奖励,它不会造成困扰着Powerline式提示的缺陷。
键入echo 'u276F'
。如果您遇到一个错误,说“ ZSH:不在范围内的角色”,您的语言环境不支持UTF-8。你需要修复它。如果您在SSH上运行ZSH,请参阅此信息。如果您在本地运行ZSH,请Google“在操作系统中设置UTF-8环境”。
键入echo 'u276F'
。如果您遇到了一个错误,说“ ZSH:不在范围内的字符”,请参见上一节。
如果echo
命令打印❯
但是光标仍位于错误的位置,请安装推荐的字体并运行p10k configure
。
如果这无济于事,请在~/.zshrc
的底部添加unset ZLE_RPROMPT_INDENT
。
还有问题吗?运行以下命令诊断问题:
() {
emulate -L zsh
setopt err_return no_unset
local text
print -rl -- ' Select a part of your prompt from the terminal window and paste it below. ' ' '
read -r ' ?Prompt: ' text
local -i len= ${(m) # text}
local frame= " +- ${(pl. $len ..-.) :- } -+ "
print -lr -- $frame " | $text | " $frame
}
+------------------------------+
| romka@adam ✓ ~/powerlevel10k |
+------------------------------+
如果将命令的输出与提示的每个部分(左右)对齐,则表示主题或配置中的错误。使用此命令诊断:
print -rl -- ${(eq+)PROMPT} ${(eq+)RPROMPT}
查找%{...%}
,在输出中进行后斜线。如果有的话,它们可能是罪魁祸首。如果您陷入困境,请打开一个问题。
+-----------------------------+
| romka@adam ✓ ~/powerlevel10k |
+-----------------------------+
这通常是由终端错误或错误配置引起的,它使其将模棱两可的字符打印为双宽宽度而不是单个宽度。例如,这个问题。
+------------------------------+
| romka@adam ✓~/powerlevel10k |
+------------------------------+
请注意,此提示与原始提示不同,因为它在复选标记后缺少一个空间。
这可能是由MACOS中的低级错误引起的。看到这个问题。
如果提示包含在Unicode标准中指定为“宽”的字形,并且您的终端将它们错误地显示为非遍布的字形,也可能发生这种情况。受此限制的终端包括Konsole,Hyper和Integrated Vscode终端。解决方案是使用不同的端子或从提示中卸下所有宽字形。
+--------------------------------+
| romka@adam ✓ ~/powerlevel10k |
+--------------------------------+
这可能是由错误配置的语言环境引起的。看到这个问题。
参见光标位于错误的位置。
参见光标位于错误的位置。
当PowerLevel10k启动时,如果未定义POWERLEVEL9K_*
参数,则自动运行p10k configure
。基于您的及时样式选择,配置向导在其中使用一堆POWERLEVEL9K_*
参数创建~/.p10k.zsh
,并在~/.zshrc
中添加了一行以源来源。下次启动ZSH时,配置向导不应自动运行。如果是这样,这意味着对~/.zshrc
的评估在达到源~/.p10k.zsh
的线之前过早终止。这通常是由于~/.zshrc
中的语法错误而发生的。这些错误被配置向导屏幕隐藏了,因此您不会注意到它们。退出配置向导时,请查找错误消息。您也可以使用POWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true zsh
启动ZSH,而无需自动运行配置向导。一旦看到错误,请修复~/.zshrc
以摆脱它们。
如果ZSH版本低于5.7.1或COLORTERM
Environment变量既不是24bit
,也不是truecolor
,则配置向导将不会提供带有Snazzy Color Schement的纯样式。修复:安装ZSH> = 5.7.1并使用带有TrueColor支持的终端。使用print -P '%F{#ff0000}red%f'
验证。
如果终端显示不到256种颜色,则配置向导预选具有8种颜色的精益样式。所有其他样式至少需要256种颜色。修复:使用具有256颜色支持的终端,并确保正确设置了TERM
环境变量。使用print $terminfo[colors]
验证。
如果系统上没有UTF-8语言环境,则配置向导将不会提供使用Unicode字符的及时样式。修复:安装UTF-8环境。使用locale -a
验证。
配置向导可能无法提供Unicode提示样式的另一种情况是何时禁用了MULTIBYTE
壳选项。修复:启用MULTIBYTE
选项,或者不将其禁用(默认情况下是在ZSH中启用此选项)。使用print -r -- ${options[MULTIBYTE]}
验证。
当启用MULTIBYTE
并提供UTF-8语言环境时,配置向导评估终端字体的功能的前几个问题。如果您的答案表明某些字形无法正确渲染,则配置向导不会提供使用它们的及时样式。修复:重新启动端子并安装建议的字体。通过运行p10k configure
并检查所有字形是否正确渲染来验证。
下载推荐的字体后,您可以像其他任何字体一样安装它。 Google“如何在操作系统上安装字体”。
tl; dr:添加ZLE_RPROMPT_INDENT=0
和POWERLEVEL9K_LEGACY_ICON_SPACING=true
to〜 ~/.zshrc
以获得与powerlevel9k中相同的提示间距。
将PowerLevel10k与PowerLevel9k配置一起使用时,您可能会在此处和那里的提示中获得其他空间。这些有两种口味。
tl; dr:添加ZLE_RPROMPT_INDENT=0
到~/.zshrc
以摆脱该空间。
来自ZSH文档:
ZLE_RPROMPT_INDENT <S>
如果设置,则用
RPS1
或RPROMPT
和屏幕的右侧给出的线编辑器的右手右侧右侧给出凹痕。如果未设置,则使用值1
。通常,这将用于将值设置为
0
,以便提示与屏幕的右侧齐平。
PowerLevel10k尊重此参数。如果设置ZLE_RPROMPT_INDENT=1
(或将其保持不设置,这与将其设置为1
一样),则您将在正确提示的右侧获得空空间。如果设置ZLE_RPROMPT_INDENT=0
,您的提示将进入终端的边缘。除了PowerLevel9K,这就是它在每个主题中的工作方式。
PowerLevel9K问题:PowerLevel9K#1292。它已被固定在PowerLevel9K的开发分支中,但该修复程序尚未master
。
添加ZLE_RPROMPT_INDENT=0
到~/.zshrc
以在提示的右边缘与powerlevel9k中的右边缘获得相同的间距。
注意:当您设置ZLE_RPROMPT_INDENT=0
时,ZSH的几个版本具有触发的错误。使用PowerLine提示样式时,PowerLevel10k可以围绕这些错误工作。如果您在提示或错误的光标位置中注意到视觉伪像,请尝试从~/.zshrc
中删除ZLE_RPROMPT_INDENT
。
tl; dr:添加POWERLEVEL9K_LEGACY_ICON_SPACING=true
~/.zshrc
以与powerlevel9k中的图标相同的间距。
在PowerLevel9k中的图标周围的间距是不一致的。
这种不一致是不断的烦恼来源,因此它是在PowerLevel10k中固定的。您可以添加POWERLEVEL9K_LEGACY_ICON_SPACING=true
~/.zshrc
,以获得与powerlevel9k中的图标相同的间距。
注意:使用p10k configure
时,定义POWERLEVEL9K_LEGACY_ICON_SPACING
并不是一个好主意。
source ~/.zshrc
之后发生了奇怪的事情无论您是否使用PowerLevel10k,运行source ~/.zshrc
几乎总是一个坏主意。此命令可能会导致随机错误,行为不当的代码和ZSH的逐步减速。
如果您已更改~/.zshrc
或由其来源的文件,请重新启动ZSH以应用它们。最可靠的方法是键入exit
,然后启动新的ZSH会话。您也可以使用exec zsh
。虽然不完全等于完成ZSH重新启动,但此命令比source ~/.zshrc
更可靠。
看到奇怪的事情在键入source ~/.zshrc
后发生。
如果安装说明对您不起作用,请尝试禁用当前主题(以便最终没有主题),然后手动安装PowerLevel10k。
~/.zshrc
,然后删除设置ZSH_THEME
行。看起来像这样: ZSH_THEME="powerlevel9k/powerlevel9k"
。~/.zshrc
,然后删除指您当前主题的zplug
命令。例如,如果您当前正在使用PowerLevel9k,请查找zplug bhilburn/powerlevel9k, use:powerlevel9k.zsh-theme
。~/.zpreztorc
并放置zstyle :prezto:module:prompt theme off
。删除设置theme
的任何其他命令,例如zstyle :prezto:module:prompt theme powerlevel9k
。~/.zshrc
并删除设定antigen theme
的线路。看起来像这样: antigen theme powerlevel9k/powerlevel9k
。git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~ /powerlevel10k
echo ' source ~/powerlevel10k/powerlevel10k.zsh-theme ' >> ~/.zshrc
这种安装方法不会使任何东西都较慢或以其他方式低于标准。
在彩虹风格中,当前的工作目录显示在蓝色背景上的明亮白色文本。白色是固定的,看起来总是相同,但“蓝色”的外观由您的终端调色板定义。如果很轻,可能很难在上面看到白色文本。
有几种解决此问题的方法。
p10k configure
并选择更可读的提示样式。POWERLEVEL9K_DIR_BACKGROUND
, POWERLEVEL9K_DIR_FOREGROUND
, POWERLEVEL9K_DIR_SHORTENED_FOREGROUND
, POWERLEVEL9K_DIR_ANCHOR_FOREGROUND
和POWERLEVEL9K_DIR_ANCHOR_BOLD
。您可以在~/.p10k.zsh
中找到它们。相关:VSCODE终端中的前景颜色不正确。
默认情况下,VSCODE终端可以用不同的颜色任意替换您选择的前景颜色。可以在VSCODE设置中关闭此行为。
当您几次水平调整终端窗口大小时,您可能会看到这张丑陋的图片。
tl; dr:当终端在调整大小时会重新提示ZSH提示时,就会出现此问题。它不是针对PowerLevel10k的。参见缓解措施。
注意:本节说问题是由ZSH中的错误引起的。虽然确实可以通过修改ZSH来避免问题,但不能以这种方式完全解决问题。因此,将责任归咎于ZSH是不公平的。
当当前提示符的开始与光标(此后VD
)之间的垂直距离时,该问题就会表现出来。
当终端窗口水平缩小时,终端有两种方法可以处理不再适合的长线:回流或截断。
缩小之前的终端内容:
终端缩小时会反弹文本:
缩小时终端会截断文本:
回流策略可以改变终端内容的高度。如果此类内容恰好是当前提示符的开始和光标的开始,则ZSH将在错误的行上打印提示。截断策略永远不会改变终端内容的高度,因此不会触发此问题。
让我们看看这个问题是如何以慢动作的。我们将首先启动zsh -f
并粘贴以下代码:
function pause() { read -s }
functions -M pause 0
reset
print -l {1..3}
setopt prompt_subst
PROMPT= $' ${$((pause()))+}left>${(pl.$((COLUMNS-12))..-.)}<right n > '
当PROMPT
扩展时,它会pause
,让我们观察终端的状态。这是最初的状态:
ZSH相对于当前提示的开始,跟踪光标位置。在这种情况下,它知道光标是下面的一行。当我们收缩终端窗口时,看起来像这样:
此时,终端将SIGWINCH
发送到ZSH,以将其通知终端尺寸的变化。请注意,该信号是在终端的内容回流之后发送的。
当Zsh收到SIGWINCH
时,它将尝试删除当前的提示并重新打印。它转到认为当前提示的位置 - 在光标上方(!)上方一行擦除所有终端内容,并在此处重新膨胀提示。但是,调整提示后不再是光标上方的一行。这是上面的两行! ZSH最终打印了新提示一行太低。
在这种情况下,我们最终得到了不需要的垃圾内容,因为VD
有所增加。当您使终端窗口更宽时, VD
也可以减小,这将导致新提示的打印高于预期,并可能在此过程中删除有用的内容。
这里还有一些示例,其中缩小端子窗口增加了VD
。
prompt_subst
。请注意,光标位于提示线以下(命中ESC-Enc-Encter将其放在那里)。prompt_subst
,没有正确的提示。由于命令行包裹着命令行, VD
势必会增加。 此ZSH补丁将问题解决在某些终端上。补丁背后的想法是在打印提示和rc
(还原光标)之前使用sc
(保存光标)终端功能,以在需要刷新提示时将光标转回原始位置。
该补丁仅在重新启用终端窗口时将光标位置的终端与文本一起工作。该补丁没有可观察到的对不会在调整大小上反射文本的终端(修补ZSH的ZSH表现正确的ZSH),也没有反对文本但没有保存的光标位置的终端(均已修补的ZSH位置(修补和未拨打的ZSH REDRAW提示)的终端,都没有明显的影响。 )。换句话说,补丁可以在某些终端上解决调整大小问题,同时将行为保持在其他终端。
乍一看似乎有两种替代方法来修补ZSH,但实际上却不是:
sc
,请使用u7
终端功能查询当前光标位置,然后cup
回到它。这是行不通的,因为当文本回流时,当前提示的开始的绝对位置会更改。VD
。这是不起作用的,因为ZSH不知道终端是将文本反弹还是截断。如果ZSH可以以某种方式知道终端会反弹文本,那么这种方法仍无法在调整窗口大小的窗口时不断地回流文本和快速射击SIGWINCH
的终端。在这种环境下,实际终端维度与ZSH认为的尺寸不同步。该补丁没有ETA进入上游ZSH。参见讨论。
这个问题有一些缓解选择。
POWERLEVEL9K_TERM_SHELL_INTEGRATION=true
in〜 ~/.p10k.zsh
。POWERLEVEL9K_SHOW_RULER=false
。POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' '
的提示连接。POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX=''
, POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX=''
和POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX=''
。POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=()
。仅当光标在其下方时,上一条提示线上的正确提示将导致调整问题。这不是很常见,因此您可能需要在POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
中保留一些元素,前提是它们都不是由newline
成功的。将Konsole与非单调字体使用时,可以在右侧切断图标。在这里,“非单调”是指比单列宽的任何字体,或者是单列标准中指定为“宽”的字形的两个列的字体。
屏幕截图上的最后一行显示一个切断的Arch Linux徽标。
这个问题有几种缓解选择。
os_icon
提示段的内容被切断,请打开~/.p10k.zsh
,搜索POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION
并将其更改如下: typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION= ' ${P9K_CONTENT} ' # extra space at the end
~/.p10k.zsh
: typeset -g POWERLEVEL9K_LINUX_ARCH_ICON= ' Arch ' # plain "Arch" in place of a logo
os_icon
提示段的内容被切断,请打开~/.p10k.zsh
并从POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
和POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
中删除os_icon
。注意:非占主题字体并未得到Konsole的正式支持。
有些字体中具有粗体字体中的虚线图标。有两种解决此问题的方法。
~/.p10k.zsh
,搜索POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION
并从其值中删除%B
。 typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION= ' ${P9K_CONTENT} ' # not bold
PowerLevel10k使用Gitstatusd检查GIT存储库状态。该项目依赖于Libgit2库,该库在其实施方面存在一些差距。在某些情况下,这可能会导致GIT存储库的真实状态(通过git status
反映)与PowerLevel10k提示中显示的内容之间存在差异。
最值得注意的是,libgit2不支持skipHash
。如果您在提示中看到不正确的git状态,请运行git config -l
并检查是否启用了skipHash
。如果是,请考虑禁用它。请记住,在激活某些GIT功能(例如manyFiles
时, skipHash
可能会隐式启用。