
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),僅供參考