菜单

样式自定义

相关源文件

本页面提供了 Powerlevel10k 提示符视觉外观定制的全面指南。它涵盖了如何修改颜色、图标、分隔符和其他样式元素,以创建您理想的终端体验。有关创建具有新功能的自定义段的信息,请参阅 自定义段

理解样式系统

Powerlevel10k 通过其配置系统提供了强大的样式功能。样式定制主要通过在您的 ~/.p10k.zsh 配置文件中设置特定的 Zsh 变量来实现。

样式变量命名约定

Powerlevel10k 中的样式参数遵循一致的命名模式。

POWERLEVEL9K_<SEGMENT>_<STYLE_ASPECT>

其中

  • <SEGMENT> 是提示符段的名称(例如 DIRVCSSTATUS)。
  • <STYLE_ASPECT> 定义了您正在定制的方面(例如 FOREGROUNDBACKGROUNDVISUAL_IDENTIFIER_EXPANSION)。

对于具有不同状态或类别的段,模式会扩展到:

POWERLEVEL9K_<SEGMENT>_<STATE/CLASS>_<STYLE_ASPECT>

例如:POWERLEVEL9K_DIR_HOME_FOREGROUND

来源:config/p10k-lean.zsh209-342 config/p10k-classic.zsh217-347

提示符结构和布局

提示符的组成部分

Powerlevel10k 提示符由排列在行中的段组成,每行都有左侧和右侧。理解这种结构对于有效的定制至关重要。

来源:config/p10k-lean.zsh25-111 config/p10k-classic.zsh25-112

配置提示符元素

您可以使用 POWERLEVEL9K_LEFT_PROMPT_ELEMENTSPOWERLEVEL9K_RIGHT_PROMPT_ELEMENTS 数组来控制显示在提示符左右两侧的段。

要创建多行提示符,请在您想要换行的地方包含 newline 元素。

来源:config/p10k-lean.zsh25-111 config/p10k-classic.zsh25-112 config/p10k-rainbow.zsh25-111

颜色自定义

设置段的颜色

颜色使用每个段的 FOREGROUNDBACKGROUND 样式方面进行设置。

typeset -g POWERLEVEL9K_DIR_FOREGROUND=31           # Sets text color
typeset -g POWERLEVEL9K_DIR_BACKGROUND=4            # Sets background color (if using a style with backgrounds)

颜色可以通过几种方式指定:

  • 基本 ANSI 颜色(0-7)
  • 亮色 ANSI 颜色(8-15)
  • 256 色调色板数字(16-255)

Powerlevel10k 包含一个有用的命令来查看可用颜色。

for i in {0..255}; do print -Pn "%K{$i}  %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done

来源:config/p10k-lean.zsh6 config/p10k-lean.zsh209-210 config/p10k-rainbow.zsh216-219

基于状态的条件样式

许多段具有不同的状态,每种状态都有不同的样式参数。

来源:config/p10k-lean.zsh343-505 config/p10k-rainbow.zsh356-504

图标定制

视觉标识符

每个段都可以使用 VISUAL_IDENTIFIER_EXPANSION 参数来设置图标或“视觉标识符”。

typeset -g POWERLEVEL9K_DIR_VISUAL_IDENTIFIER_EXPANSION='📁'

对于需要根据状态更改图标的段,您可以设置不同的扩展。

typeset -g POWERLEVEL9K_VCS_CLEAN_VISUAL_IDENTIFIER_EXPANSION='✓'
typeset -g POWERLEVEL9K_VCS_MODIFIED_VISUAL_IDENTIFIER_EXPANSION='!'

图标字体和字符集

Powerlevel10k 通过 POWERLEVEL9K_MODE 参数支持不同的图标集。

typeset -g POWERLEVEL9K_MODE=nerdfont-complete

可用的模式包括:

  • nerdfont-complete:使用 Nerd Fonts,包含完整的图标集。
  • awesome-fontconfig:使用 Font Awesome 图标。
  • awesome-mapped-fontconfig:Font Awesome 附加映射。
  • awesome-patched:用于带有 Font Awesome 图标的补丁字体。
  • compatible:仅使用 ASCII 字符(适用于有限的字体支持)。

来源:config/p10k-lean.zsh114-117 config/p10k-classic.zsh114-117

分隔符

段和子段分隔符

分隔符定义了段和子段之间的视觉边界。

使用以下方法配置它们:

# For prompts with different background colors
typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0'    # Right-pointing solid triangle
typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2'   # Left-pointing solid triangle

# For segments of the same color
typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='\uE0B1'  # Right-pointing thin triangle
typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='\uE0B3' # Left-pointing thin triangle

对于“lean”样式(透明背景),通常使用不同的分隔符设置。

typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR=' '  # Simple space
typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR=' ' # Simple space
typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR=''      # No separator
typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR=''     # No separator

来源:config/p10k-classic.zsh166-175 config/p10k-lean.zsh121-124 config/p10k-rainbow.zsh163-172

多行提示符连接器

对于多行提示符,您可以自定义行之间的连接器。

typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='╭─'
typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='├─'
typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='╰─'
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='─╮'
typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='─┤'
typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='─╯'

这会在您的提示符周围创建一个框线绘制样式的框架。

来源:config/p10k-classic.zsh136-144 config/p10k-rainbow.zsh138-144

内容格式化

自定义段内容

Powerlevel10k 通过 CONTENT_EXPANSION 参数提供广泛的内容自定义。这允许您精确控制显示在每个段中的文本。

# Customize directory truncation
typeset -g POWERLEVEL9K_DIR_CONTENT_EXPANSION='%~'  # Standard Zsh prompt expansion

# More complex example for Git status
typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}'

许多段都有特定的格式参数。

# Truncate directory if it's longer than 80 characters
typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80

# Show at most two decimals for command duration
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=2

来源:config/p10k-lean.zsh268 config/p10k-lean.zsh482-483 config/p10k-lean.zsh546

段类别和条件样式

目录类别

Powerlevel10k 允许定义目录类,以便根据路径模式应用不同的样式

目录类可以在您的配置文件中定义

typeset -g POWERLEVEL9K_DIR_CLASSES=(
  '~/work(|/*)'  WORK     ''   # Matches ~/work and all subdirectories
  '~(|/*)'       HOME     ''   # Matches ~ and all subdirectories
  '*'            DEFAULT  ''   # Matches everything else
)

# Then style each class
typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31
typeset -g POWERLEVEL9K_DIR_HOME_FOREGROUND=39

对于 kubecontextterraform 等其他片段也存在类似的分类系统。

来源: config/p10k-lean.zsh289-342 config/p10k-classic.zsh298-347

样式模板

Powerlevel10k 提供了三个内置样式模板,您可以将它们作为自定义的起点

1. 极简风格

极简风格采用极简主义方法,具有透明背景

# Basic style options that define the overall look of your prompt.
typeset -g POWERLEVEL9K_BACKGROUND=                            # transparent background
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE=  # no surrounding whitespace
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' '  # separate segments with a space
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR=        # no end-of-line symbol

来源: config/p10k-lean.zsh121-124

2. 经典风格

经典风格采用类似 powerline 的方法,具有彩色背景和三角形分隔符

# Default background color.
typeset -g POWERLEVEL9K_BACKGROUND=238

# Separator between same-color segments on the left.
typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='%246F\uE0B1'
# Separator between same-color segments on the right.
typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='%246F\uE0B3'
# Separator between different-color segments on the left.
typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0'
# Separator between different-color segments on the right.
typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2'

来源: config/p10k-classic.zsh163-175

3. 彩虹风格

彩虹风格为不同片段使用各种背景颜色

# Segment background colors for rainbow style
typeset -g POWERLEVEL9K_DIR_BACKGROUND=4
typeset -g POWERLEVEL9K_VCS_CLEAN_BACKGROUND=2
typeset -g POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=3
typeset -g POWERLEVEL9K_STATUS_OK_BACKGROUND=0

来源: config/p10k-rainbow.zsh217 config/p10k-rainbow.zsh356-359

常见自定义示例

更改显示模式

不同字体的不同显示模式

# For Nerd Font users
typeset -g POWERLEVEL9K_MODE=nerdfont-complete

# For minimal ASCII-only compatibility
typeset -g POWERLEVEL9K_MODE=compatible

来源: config/p10k-lean.zsh114

修改提示符布局

# Add an empty line before each prompt
typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true

# Connect left prompt lines with arrows
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%242F╭─'
typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%242F╰─'

# Use a custom character for prompt symbol
typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_VIINS_CONTENT_EXPANSION='❯'
typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_VIINS_CONTENT_EXPANSION='❯'

来源: config/p10k-lean.zsh139-145 config/p10k-classic.zsh138-144

目录自定义

# Shorten directory display
typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique
typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1

# Use bold for anchor directories
typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true

# Custom styling for ~/work directories
typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31

来源: config/p10k-lean.zsh213-230

创建自己的风格

创建您自己的自定义风格

  1. 从现有模板开始 (~/.p10k.zsh)
  2. 根据需要修改样式参数
  3. 通过运行 source ~/.p10k.zsh 来测试更改
  4. 不断迭代,直到您满意为止

请记住,样式是可以混合搭配的 - 您可以从彩虹风格中获取片段颜色,从经典风格中获取分隔符,从极简风格中获取布局,从而创造出独特的东西。

来源: config/p10k-lean.zsh1-2 config/p10k-classic.zsh1-2 config/p10k-rainbow.zsh1-2

高级样式技术

条件化片段显示

使用条件参数控制片段的出现时机

# Show kubecontext only when using kubectl commands
typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx'

# Hide nordvpn status when disconnected
typeset -g POWERLEVEL9K_NORDVPN_DISCONNECTED_CONTENT_EXPANSION=

来源: config/p10k-lean.zsh1229 config/p10k-lean.zsh714-715

自定义格式化函数

对于 Git 状态等复杂片段,您可以定义自定义格式化函数

function my_git_formatter() {
  # Custom logic to format git status display
  # ...
}

然后在您的内容扩展中使用此函数

typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}'

来源: config/p10k-lean.zsh359-462 config/p10k-lean.zsh482

故障排除样式问题

如果您的自定义设置未按预期工作

  1. 检查参数名称中的拼写错误
  2. 确保您的终端支持您使用的颜色和字形
  3. 验证您已为选择的 POWERLEVEL9K_MODE 安装了合适的字体
  4. 尝试使用 p10k configure 重置为默认设置,然后逐步添加自定义设置

请记住,您可以通过运行 p10k configure 向导随时恢复到有效的配置。

来源: config/p10k-lean.zsh19-20