WezTerm 配置指南:colors 配色方案完整解析与实战
WezTerm 配置指南colors 配色方案完整解析与实战【免费下载链接】weztermA GPU-accelerated cross-platform terminal emulator and multiplexer written by wez and implemented in Rust项目地址: https://gitcode.com/GitHub_Trending/we/wezterm导读本文围绕 WezTerm 配置系统中的一个核心入口 ——colors配置段展开系统讲解如何自定义终端调色板color palette包括前景/背景色、光标色、ANSI 16 色、扩展索引色、复制模式与快速选择quick-select高亮色、选项卡栏配色等全部字段并涵盖color_scheme、color_schemes、独立 TOML 方案文件与动态配色转义序列等关联机制。读完本文你将掌握从零构建一套个性化 WezTerm 配色的完整能力并理解其底层调色板模型与合并优先级的工作原理。本文对应配置入口为 colors 配置参考完整上下文见 Colors Appearance。colors是什么调色板配置的入口在 WezTerm 中colors是一个用于指定终端颜色调色板color palette的 Lua 配置段。它决定了终端会话中文本、光标、选区、分割线、滚动条乃至各种 UI 覆盖层overlay的默认颜色。官方文档将这一主题详细展开在 Colors Appearance 章节中。从源码层面看colors段对应的数据结构是config/src/color.rs中的Palette结构体它被声明为#[derive(FromDynamic, ToDynamic)]意味着 Lua 配置中的每一项都会被动态映射为该结构体字段。该结构体完整罗列了colors段支持的字段包括foreground/background默认文本色与背景色cursor_fg/cursor_bg/cursor_border光标前景、背景与边框色selection_fg/selection_bg选中文本的前景与背景色ansi基础 ANSI 8 色索引 0–7brights明亮版 ANSI 8 色索引 8–15indexed索引 16–255 的任意扩展色映射tab_bar选项卡栏配色见后文scrollbar_thumb、split、visual_bell、compose_cursor复制模式、快速选择、输入选择器与启动器launcher的标签/匹配高亮色。而在 config/src/config.rs 中colors被声明为pub colors: OptionPalette与color_scheme、color_schemes共同参与最终调色板的解析。基础用法一个完整的colors配置示例在.wezterm.lua中你可以像下面这样指定完整调色板。除 SVG/CSS3 颜色名称如silver、black外也可以使用常见的#RRGGBB十六进制写法例如#000000等价于blacklocal wezterm require wezterm local config {} config.colors { -- 默认文本颜色 foreground silver, -- 默认背景颜色 background black, -- 当光标样式为 Block 时覆盖光标所在单元格的背景色 cursor_bg #52ad70, -- 当光标所在单元格被光标占据时覆盖其文本颜色 cursor_fg black, -- 指定光标样式为 Block 时的边框颜色 -- 或光标样式为 Bar / Underline 时的垂直或水平条颜色 cursor_border #52ad70, -- 选中文本的前景颜色 selection_fg black, -- 选中文本的背景颜色 selection_bg #fffacd, -- 滚动条滑块代表当前视口的拇指条的颜色 scrollbar_thumb #222222, -- 窗格之间分割线的颜色 split #444444, ansi { black, maroon, green, olive, navy, purple, teal, silver, }, brights { grey, red, lime, yellow, blue, fuchsia, aqua, white, }, -- 调色板中 16 到 255 之间的任意颜色 indexed { [136] #af8700 }, -- 自 2022-03-19 版本20220319-142410-0fcdea07起 -- 当 IME、死键dead key或 leader key 正在处理输入组合、暂存输入时 -- 将光标切换为该颜色以便给出组合状态的视觉提示。 compose_cursor orange, -- 复制模式copy_mode与快速选择quick_select的颜色 -- 自 2022-08-07 版本20220807-113146-c2fee766起可用。 -- 在 copy_mode 中活动文本的颜色是 -- 1. 若使用鼠标额外选中了文本则为 copy_mode_active_highlight_* -- 2. 否则为 selection_*。 copy_mode_active_highlight_bg { Color #000000 }, -- 使用 AnsiColor 可指定 ANSI 调色板索引 0-15中的某个颜色 -- 可用的名称包括 Black, Maroon, Green, Olive, Navy, -- Purple, Teal, Silver, Grey, Red, Lime, Yellow, -- Blue, Fuchsia, Aqua 或 White。 copy_mode_active_highlight_fg { AnsiColor Black }, copy_mode_inactive_highlight_bg { Color #52ad70 }, copy_mode_inactive_highlight_fg { AnsiColor White }, quick_select_label_bg { Color peru }, quick_select_label_fg { Color #ffffff }, quick_select_match_bg { AnsiColor Navy }, quick_select_match_fg { Color #ffffff }, -- 以下字段自 nightly 构建起可用 input_selector_label_bg { AnsiColor Black }, input_selector_label_fg { Color #ffffff }, launcher_label_bg { AnsiColor Black }, launcher_label_fg { Color #ffffff }, } return config颜色值的多种写法从十六进制到 CSS 色彩函数HSL 色彩空间自 2022-01-01 版本20220101-133340-7edc5b5a起如果你更偏好 HSL 而非 RGB可以使用如下写法config.colors { -- 第一个数字是色相hue单位为度取值范围 0-360。 -- 第二个数字是饱和度saturation单位为百分比取值范围 0-100。 -- 第三个数字是明度lightness单位为百分比取值范围 0-100。 foreground hsl:235 100 50, }CSS 风格颜色规范自 2022-03-19 版本20220319-142410-0fcdea07起颜色值还支持以下 CSS 风格规范这些写法来自对颜色解析的实现可参考 termwiz 颜色解析 与 颜色解析函数rgb(0,255,0) rgb(0% 100% 0%) rgb(0 255 0 / 100%) rgba(0,255,0,1) hsl(120,100%,50%) hsl(120deg 100% 50%) hsl(-240 100% 50%) hsl(-240deg 100% 50%) hsl(0.3333turn 100% 50%) hsl(133.333grad 100% 50%) hsl(2.0944rad 100% 50%) hsla(120,100%,50%,100%) hwb(120 0% 0%) hwb(480deg 0% 0% / 100%) hsv(120,100%,100%) hsv(120deg 100% 100% / 100%)可以看到rgb/rgba/hsl/hsla/hwb/hsv等函数形式均被支持角度单位既可以是deg也可以是turn、grad、rad。Alpha 通道的特殊行为selection_fg/selection_bg大多数场景下 alpha 值会被忽略但selection_fg和selection_bg例外config.colors { -- 让选区文本颜色完全透明。 -- 完全透明时将使用当前文本颜色。 selection_fg none, -- 为选区背景色设置 alpha。 -- 当 selection_bg 透明时它会与当前单元格背景色进行 alpha 混合 -- 而不是直接替换。 selection_bg rgba(50% 50% 50% 50%), }优先级colors与color_scheme的关系理解 WezTerm 配色体系必须先厘清colors与color_scheme的优先级关系color_scheme用于从内置或自定义的命名配色方案中选择一个整体方案在早期版本中二者是互斥的color_scheme优先于colors段自 2022-09-03 版本20220903-194523-3bb1ed61起行为已改变color_scheme定义的方案作为基础colors段中的任何颜色都会覆盖方案中的对应项。这一合并逻辑在源码中有直接体现。在 config/src/config.rs 的配置解析流程中if let Some(scheme) cfg.color_scheme.as_ref() { match cfg.resolve_color_scheme() { None { /* 输出错误日志 */ } Some(p) { cfg.resolved_palette p.clone(); } } } if let Some(colors) cfg.colors { cfg.resolved_palette cfg.resolved_palette.overlay_with(colors); }而overlay_with定义于 config/src/color.rs它会逐字段检查colors段中哪些字段为Some仅用这些字段覆盖方案值其余字段沿用方案原值。换句话说colors段可以只写你想覆盖的一两个字段其余自动继承自color_scheme。需要注意的是如果使用 ssh 或 tls 域进行多路复用multiplexing颜色方案由多路复用服务器端的配置文件控制因为调色板属于终端仿真的属性该状态保存在多路复用服务器上。如果你需要合并/覆盖内置方案的颜色官方建议使用 wezterm.color.get_default_colors() 获取默认颜色后显式合并示例见 wezterm.get_builtin_color_schemes()其中还包含随机选取配色方案、从内置方案派生新方案等进阶用法。在.wezterm.lua中定义命名配色方案color_schemes如果你希望在自己的配置文件中维护多套配色而不是每次都填满colors段可以把它放到color_schemes段中然后通过color_scheme引用。在wezterm.lua中定义的配色方案名称优先于所有其他配色方案colors段可用的全部设置在color_schemes段中同样可用config.color_scheme Red Scheme config.color_schemes { [Red Scheme] { background red, }, [Blue Scheme] { background blue, }, }该配置项入口见 color_schemes 配置参考。在独立文件中定义配色方案TOML 与搜索路径编写 TOML 方案文件如果你想将配色方案拆分成独立文件可以创建 TOML 格式的文件内含[colors]段。仓库中内置数百个配色方案的生成源数据位于 config/src/scheme_data.rs可作为编写参考另外 sync-color-schemes 工具 展示了从 base16、Gogh、iTerm2、terminal.sexy 等来源同步方案的解析逻辑。一个典型的 TOML 方案文件形如该示例同时验证了indexed扩展色的解析对应源码测试见 config/src/color.rs[colors] foreground #005661 background #fef8ec cursor_bg #005661 cursor_border #005661 cursor_fg #ffffff selection_bg #cfe7f0 selection_fg #005661 ansi [ #8ca6a6, #e64100, #00b368, #fa8900, #0095a8, #ff5792, #00bdd6, #005661 ] brights [ #8ca6a6, #e5164a, #00b368, #b3694d, #0094f0, #ff5792, #00bdd6, #004d57 ] [colors.indexed] 52 #fbdada 88 #f6b6b6 22 #d6ffd6 28 #adffad 53 #feecf7 17 #e5dff6 23 #d8fdf6 58 #f4ffe0注意方案文件中ansi颜色是必需的 —— 从源码看ColorSchemeFile::from_toml_value 会强制校验scheme.colors.ansi.is_some()缺失时会报错scheme is missing ANSI colors。方案的存放目录官方建议在 POSIX 系统上将自定义方案放在$HOME/.config/wezterm/colors目录在 Windows 系统上WezTerm 会在wezterm.exe所在目录的同级colors目录中搜索方案。若想使用其他位置则需要通过color_scheme_dirs设置指定要搜索的目录列表详见 color_scheme_dirs 配置参考config.color_scheme_dirs { /some/path/to/my/color/schemes }在color_scheme_dirs列表中的文件里定义的配色方案名称优先于内置配色方案。这一搜索加载逻辑对应源码中的compute_color_scheme_dirs与load_color_schemesconfig/src/config.rs默认搜索路径会追加各配置目录下的colors子目录Windows 上还会把wezterm.exe旁的colors目录置于首位加载时只读取.toml后缀文件文件名去掉后缀即作为方案名已存在的方案名会被跳过即先加载的优先级更高。动态颜色转义序列运行时切换配色WezTerm 支持通过转义序列动态修改颜色调色板。iTerm2-Color-Schemes 仓库的dynamic-colors目录中包含大量 shell 脚本可以即时切换配色方案。你可以在自己的脚本中以编程方式改变终端外观$ git clone iTerm2-Color-Schemes 仓库地址 $ cd iTerm2-Color-Schemes/dynamic-colors $ for scheme in *.sh ; do ; echo $scheme ; \ bash $scheme ; ../tools/screenshotTable.sh; sleep 0.5; done这些脚本利用 OSC 转义序列如OSC 10/OSC 11设置前景/背景色向终端下发调色板更新WezTerm 的转义序列解析器实现在 wezterm-escape-parser 中。仓库内的演示视频 docs/screenshots/wezterm-dynamic-colors.mp4 展示了逐套方案轮换的效果。选项卡栏配色tab_bar结构colors段中的tab_bar字段用于控制选项卡栏tab bar的颜色。选项卡栏有两种模式默认的原生外观fancy tab bar和复古风格retro tab bar二者配置大体相似但细节略有不同。相关开关包括use_fancy_tab_bar选择选项卡栏样式enable_tab_bar是否启用选项卡栏hide_tab_bar_if_only_one_tab仅有一个选项卡时隐藏选项卡栏tab_bar_at_bottom将选项卡栏放在窗口底部tab_max_width复古模式下单个选项卡的最大宽度以单元格为单位。原生Fancy选项卡栏外观以下选项影响 fancy 选项卡栏其中窗口标题栏配色通过window_frame配置config.window_frame { -- 选项卡栏使用的字体。 -- 默认是 Roboto Bold该字体已随 wezterm 捆绑发布。 -- 此处选定的字体会自动追加主字体设置以继承你可能使用过的回退字体。 font wezterm.font { family Roboto, weight Bold }, -- 选项卡栏中字体的大小。 -- 在 Windows 上默认 10.0在其他系统上默认 12.0。 font_size 12.0, -- 窗口聚焦时选项卡栏的整体背景色 active_titlebar_bg #333333, -- 窗口未聚焦时选项卡栏的整体背景色 inactive_titlebar_bg #333333, } config.colors { tab_bar { -- 非活动选项卡边缘/分隔线的颜色 inactive_tab_edge #575757, }, }复古Retro选项卡栏外观config.colors { tab_bar { -- 窗口顶部那条色带的颜色 -- 使用 fancy 选项卡栏时不生效 background #0b0022, -- 活动选项卡是窗口中拥有焦点的选项卡 active_tab { -- 选项卡背景区域的颜色 bg_color #2b2042, -- 选项卡文本的颜色 fg_color #c0c0c0, -- 指定该选项卡标签的强度Half、Normal 或 Bold。 -- 默认是 Normal intensity Normal, -- 指定该选项卡标签的下划线None、Single 或 Double。 -- 默认是 None underline None, -- 是否以斜体渲染该选项卡文本true/false。默认 false。 italic false, -- 是否以删除线渲染该选项卡文本。默认 false。 strikethrough false, }, -- 非活动选项卡是不具有焦点的选项卡 inactive_tab { bg_color #1b1032, fg_color #808080, -- 上面 active_tab 中列出的相同选项同样适用于 inactive_tab。 }, -- 鼠标指针悬停在非活动选项卡上时可以配置一些替代样式 inactive_tab_hover { bg_color #3b3052, fg_color #909090, italic true, -- 上面 active_tab 中列出的相同选项同样适用于 inactive_tab_hover。 }, -- 用于创建新选项卡的新建选项卡按钮 new_tab { bg_color #1b1032, fg_color #808080, -- 上面 active_tab 中列出的相同选项同样适用于 new_tab。 }, -- 鼠标悬停在新建选项卡按钮上时的替代样式 new_tab_hover { bg_color #3b3052, fg_color #909090, italic true, -- 上面 active_tab 中列出的相同选项同样适用于 new_tab_hover。 }, }, }从源码看tab_bar对应 TabBarColors 结构体每个选项卡项对应TabBarColor包含intensity、underline、italic、strikethrough、bg_color、fg_color其as_cell_attributes()方法会把配色转换为渲染用单元格属性config/src/color.rs。这些默认值如非活动选项卡默认#333333背景、#808080文本同样在该文件中以default_inactive_tab等函数定义。相关 API 与进一步阅读wezterm.color.get_default_colors()获取默认颜色用于显式合并覆盖wezterm.get_builtin_color_schemes()获取内置配色方案列表包含随机选取与派生方案的进阶示例wezterm.color.parse()颜色字符串解析wezterm.color.get_builtin_schemes()获取内置方案数据内置配色方案目录与截图数据docs/colorschemes/data.json内置方案生成源config/src/scheme_data.rs调色板数据结构与合并逻辑config/src/color.rs、config/src/config.rs。小结colors配置段是 WezTerm 个性化外观体系的核心地基。通过它你可以精确控制终端 16 色 ANSI 基础色、扩展索引色、光标、选区、分割线、滚动条、复制模式/快速选择高亮以及选项卡栏等几乎全部界面颜色配合color_scheme与color_schemes可以分层复用配色独立 TOML 方案文件加上color_scheme_dirs则便于管理和分发你自己的主题。理解overlay_with的逐字段合并语义就能用最少的配置写出风格统一且可维护的配色体系。【免费下载链接】weztermA GPU-accelerated cross-platform terminal emulator and multiplexer written by wez and implemented in Rust项目地址: https://gitcode.com/GitHub_Trending/we/wezterm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考