WezTerm 外观配置完全指南:配色方案、Tab 栏与窗口背景定制

📅 发布时间:2026/9/10 20:20:07
WezTerm 外观配置完全指南:配色方案、Tab 栏与窗口背景定制
WezTerm 外观配置完全指南配色方案、Tab 栏与窗口背景定制【免费下载链接】weztermA GPU-accelerated cross-platform terminal emulator and multiplexer written by wez and implemented in Rust项目地址: https://gitcode.com/GitHub_Trending/we/wezterm本篇指南基于 WezTermRust 编写的 GPU 加速跨平台终端模拟器官方外观配置文档系统讲解如何通过.wezterm.lua配置文件定制终端的视觉外观涵盖内置配色方案的选择与自定义、colors与color_scheme的优先级规则、Tab 栏两种外观模式的精细调色、窗口内边距、非活动窗格 HSB 变换以及背景图、渐变与透明度等完整方案。读完本文你将掌握从一键切换配色到打造个人专属终端外观的完整实战能力并了解每项配置背后的源码实现逻辑。颜色方案Color Scheme基础WezTerm 内置了超过 700 种颜色方案来源包括 iTerm2-Color-Schemes、base16、Gogh 与 terminal.sexy 等知名配色项目并通过 config/src/scheme_data.rs 编译进二进制文档形式的完整清单见 配色方案数据。选择一套配色只需在配置文件中设置color_scheme一项local wezterm require wezterm local config {} config.color_scheme Batman return config如果你希望配色随系统深色/浅色模式自动切换可以使用 wezterm.gui.get_appearance()自 20220807-113146-c2fee766 起提供——该函数返回Light、Dark、LightHighContrast或DarkHighContrast四种值wezterm 能在系统外观变化时自动检测并重载配置local wezterm require wezterm -- wezterm.gui 在 mux server 侧不可用需对服务端求值时做兜底 function get_appearance() if wezterm.gui then return wezterm.gui.get_appearance() end return Dark end function scheme_for_appearance(appearance) if appearance:find Dark then return Builtin Solarized Dark else return Builtin Solarized Light end end return { color_scheme scheme_for_appearance(get_appearance()), }多路复用场景的注意点如果你通过 ssh 或 tls 域进行多路复用multiplexing配色方案由多路复用服务端mux server的配置文件决定。这是因为调色板属于终端模拟状态的属性而该状态存活在服务端进程上客户端本地配置的color_scheme不会生效。从源码看color_scheme的解析逻辑位于 config/src/config.rs 的resolve_color_scheme()它先在config.color_schemes用户自定义映射表中查找未命中再回退到内置COLOR_SCHEMES表若仍找不到启动时会输出color_scheme... but that scheme was not found的错误日志。colors与color_scheme的优先级自 20220903-194523-3bb1ed61 起两者的合并行为被调整为先以你选定的color_scheme定义全部颜色然后colors段中显式定义的任何颜色会覆盖同名项。换言之color_scheme提供基底colors提供覆盖层两者并非完全互斥。config.color_scheme Builtin Solarized Dark config.colors { -- 仅覆盖背景色其余颜色沿用配色方案 background #1a1b26, }这段合并逻辑对应源码Palette::overlay_with()位于 config/src/color.rs遍历每个颜色字段若other即colors段中存在该字段则取用否则回退到self即配色方案中的值。若你需要在 Lua 中显式获取配色方案并手工合并可参考 wezterm.color.get_default_colors()。自定义颜色colors配置段你可以用colors段完全自定义整个调色板。颜色值除支持 SVG/CSS3 标准颜色名如silver、black外也支持#RRGGBB十六进制写法例如#000000等价于black。以下是一个覆盖核心外观的完整示例每个字段含义已随配置标注local 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, -- 16 色 ANSI 基础调色板索引 0-7 ansi { black, maroon, green, olive, navy, purple, teal, silver, }, -- 16 色 ANSI 亮色调色板索引 8-15 brights { grey, red, lime, yellow, blue, fuchsia, aqua, white, }, -- 调色板中 16 到 255 之间的任意索引色 indexed { [136] #af8700 }, -- 自 20220319-142410-0fcdea07 起当 IME、死键或 leader 键正在处理、 -- 输入被挂起等待组合结果时将光标切换为该颜色以给出视觉提示 compose_cursor orange, -- copy_mode 与 quick_select 的颜色自 20220807-113146-c2fee766 起 -- copy_mode 中活动文本的颜色若用鼠标额外选择了文本则用 -- copy_mode_active_highlight_*否则用 selection_* copy_mode_active_highlight_bg { Color #000000 }, -- 也可用 AnsiColor 引用 0-15 号 ANSI 调色板值 -- 名称取 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 }, } return config其中copy_mode_*、quick_select_*等字段的类型在源码中对应ColorSpec枚举config/src/color.rs它允许{ Color ... }任意 RGBA 颜色与{ AnsiColor Black }引用 ANSI 调色板两种写法后者可让 UI 组件颜色跟随调色板主题联动。更丰富的颜色格式HSL 颜色空间自 20220101-133340-7edc5b5a 起如果你偏好 HSL 而非 RGB可这样指定——第一个数字是色相0-360 度第二个是饱和度0-100%第三个是明度0-100%config.colors { foreground hsl:235 100 50, }CSS 风格颜色规格自 20220319-142410-0fcdea07 起颜色值同时接受以下完整的 CSS 写法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%)Alpha 通道的特殊用途alpha 值在其他颜色上会被忽略唯独对selection_fg与selection_bg生效。将selection_fg设为none完全透明时会回退使用当前文字颜色将selection_bg设为带 alpha 的颜色时它会与当前单元格背景色做 alpha 混合而不是直接替换config.colors { selection_fg none, selection_bg rgba(50% 50% 50% 50%), }关于indexed有一点需要留意源码中Palette - ColorPalette的转换config/src/color.rs会对索引小于 16 的条目打印警告并忽略提示请用ansi或brights指定低索引因此indexed只应覆盖 16-255 区间。在.wezterm.lua中定义配色方案如果不想每次填写整个colors段可以把若干套配色放进color_schemes段之后用color_scheme引用。你在配置中定义的配色名优先级高于其他任何来源的配色colors段中的所有可用设置都适用于color_schemes段config.color_scheme Red Scheme config.color_schemes { [Red Scheme] { background red, }, [Blue Scheme] { background blue, }, }更高级的用法——例如随机挑选一套配色或基于内置配色派生新方案——参见 wezterm.get_builtin_color_schemes()。在独立文件中定义配色方案TOML如果想将配色拆到独立文件以便复用可以创建带[colors]段的 TOML 文件参考内置配色文件 config/src/scheme_data.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推荐的存放位置POSIX 系统放在$HOME/.config/wezterm/colors目录下Windows 系统wezterm 会搜索wezterm.exe所在目录下的colors子目录。若想放到其他位置通过color_scheme_dirs指定搜索目录列表config.color_scheme_dirs { /some/path/to/my/color/schemes }color_scheme_dirs中文件定义的配色名优先级高于内置配色。从源码config/src/config.rs 的compute_color_scheme_dirs()与load_color_schemes()可以看到实际加载逻辑搜索路径 用户配置的color_scheme_dirs 各配置目录下的colors子目录Windows 还会把 exe 旁的colors目录插到最前目录内仅读取以.toml结尾的文件文件名去掉后缀即配色名若同名配色已被更早来源定义则跳过且解析失败的文件会被记录错误日志而不影响启动。源码测试test_indexed_colors同样位于 config/src/color.rs验证了 TOML 解析对indexed色表的支持。动态颜色转义序列WezTerm 支持通过终端转义序列在运行时动态修改调色板。iTerm2-Color-Schemes 仓库的dynamic-colors目录提供了一批可立即切换配色的 shell 脚本你可以把它们接入自己的脚本以编程方式改变终端外观$ git clone https://github.com/mbadolato/iTerm2-Color-Schemes.git $ cd iTerm2-Color-Schemes/dynamic-colors $ for scheme in *.sh ; do ; echo $scheme ; \ bash $scheme ; ../tools/screenshotTable.sh; sleep 0.5; done官方文档中同时提供了展示该动态切换效果的视频wezterm-dynamic-colors.mp4见 docs/screenshots/。Tab 栏外观与颜色Tab 栏有两种模式默认的原生风格Fancy与可选的复古风格Retro。两者的配置总体相似但细节略有差异。与之相关的总开关选项包括use_fancy_tab_bar选择使用哪种 Tab 栏样式enable_tab_bar是否启用 Tab 栏hide_tab_bar_if_only_one_tab仅有一个标签页时自动隐藏 Tab 栏tab_bar_at_bottom把 Tab 栏放在窗口底部而非顶部tab_max_width复古模式下单个标签的最大宽度以单元格数计量。原生FancyTab 栏外观以下选项作用于 Fancy 模式config.window_frame { -- Tab 栏使用的字体默认为随 wezterm 打包的 Roboto Bold -- 此处选中的字体后面会拼接主字体设置以继承你配置的回退字体 font wezterm.font { family Roboto, weight Bold }, -- Tab 栏字体大小Windows 默认 10.0其他系统默认 12.0 font_size 12.0, -- 窗口聚焦时 Tab 栏的整体背景色 active_titlebar_bg #333333, -- 窗口未聚焦时 Tab 栏的整体背景色 inactive_titlebar_bg #333333, } config.colors { tab_bar { -- 非活动 Tab 栏边缘/分隔线的颜色 inactive_tab_edge #575757, }, }从源码WindowFrameConfigconfig/src/color.rs可以看到更多未显式配置时的默认值活动/非活动标题栏背景均为#333333活动标题栏前景#ffffff、非活动#cccccc标题栏底部边框线为#2b2042窗口按钮隐藏/最大化/关闭前景#cccccc、背景#333333悬停时前景#ffffff、背景#1f1f1f同时它还支持通过border_left_width等字段设置四周边框宽度、用border_*_color指定边框颜色。另外下述tab_bar颜色对 Fancy 模式下 Tab 栏中显示的条目同样适用。复古RetroTab 栏外观以下选项控制复古模式的 Tab 栏config.colors { tab_bar { -- 窗口顶部整条 strip 的颜色Fancy 模式下不适用 background #0b0022, -- 活动标签当前聚焦的标签页 active_tab { -- 标签背景色 bg_color #2b2042, -- 标签文字颜色 fg_color #c0c0c0, -- 标签文字的强度Half、Normal 或 Bold默认 Normal intensity Normal, -- 标签文字下划线None、Single 或 Double默认 None underline None, -- 标签文字是否斜体默认 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 }, }, }对应源码TabBarColorsconfig/src/color.rs还暴露了inactive_tab_edge与inactive_tab_edge_hover两个字段其默认值分别为#575757与#363636而active_tab的默认样式是背景#000000、前景#c0c0c0inactive_tab默认背景#333333、前景#808080inactive_tab_hover默认背景#1f1f1f、前景#909090且斜体。需要说明的是Tab 栏颜色不属于终端模型无法像动态配色那样通过转义序列实时更新。窗口内边距Window Padding可以给终端区域四周增加内边距单位默认为像素配置详见 window_paddingconfig.window_padding { left 2, right 2, top 0, bottom 0, }如果开启了滚动条enable_scroll_barright的值将控制滚动条宽度若right设为 0滚动条宽度会退化为一个单元格的宽度。自 20211204-082213-a66c61ee9 起内边距还支持带单位后缀的字符串1pxpx表示像素即 1 像素1ptpt表示磅1 英寸 72 磅实际屏幕尺寸取决于显示设备的 DPI1cellcell表示终端单元格尺寸由字号、字体缩放与 DPI 决定用于宽度时取单元格宽用于高度时取单元格高1%%表示终端显示区域尺寸的百分比由行列数与单元格尺寸计算得出注意某些窗口缩放场景下百分比值可能不完全稳定因为内边距尺寸又参与行列数的计算。支持小数如0.5cell以及大于 1 的数如72pt。当前版本的默认内边距为config.window_padding { left 1cell, right 1cell, top 0.5cell, bottom 0.5cell, }非活动窗格样式Styling Inactive Panes自 20201031-154415-9614e117 起为了更容易分辨哪个窗格处于活动状态非活动窗格会被轻微变暗并降低饱和度。你可以通过inactive_pane_hsb用色相hue、饱和度saturation、亮度brightness乘数自定义这个变换。下面是非活动窗格被轻微去饱和并调暗的配置也是默认行为config.inactive_pane_hsb { saturation 0.9, brightness 0.8, }变换原理先将窗格的 RGB 颜色转换为 HSV 值再乘以inactive_pane_hsb中指定的数值。hue色相沿色轮旋转颜色。它不如另外两个分量实用但作为颜色空间转换的副产品可以免费获得saturation饱和度增减颜色的鲜艳程度值越小看起来越淡、越灰白brightness亮度调暗或增亮感知亮度。取值范围为 0.0 及以上作为乘数作用于现有数值默认 1.0 保持原样0.5 减半2.0 加倍。对应的数据结构HsbTransform定义在 config/src/color.rs其结构体级默认值均为 1.0。窗口背景图Window Background Image自 20201031-154415-9614e117 起可以为窗口附加背景图片config.window_background_image /path/to/wallpaper.jpg相对路径会基于wezterm.lua配置文件所在目录进行展开支持 PNG、JPEG、GIF、BMP、ICO、TIFF、PNM、DDS、TGA 与 farbfeld 格式窗口聚焦时GIF 与 PNG 动图会持续播放图片会被缩放以填满窗口内容区域。超大图片可能降低渲染性能并占用 GPU 显存使用前建议先压缩尺寸背景图相关完整说明见 window_background_image。若希望压暗过亮的壁纸以保证文字可读可用 window_background_image_hsb 施加色相/饱和度/亮度变换config.window_background_image /path/to/wallpaper.jpg config.window_background_image_hsb { -- 把背景图调暗到原来的 1/3 brightness 0.3, -- 色相乘数1.0 表示不变 hue 1.0, -- 饱和度乘数 saturation 1.0, }更精细的控制缩放、平铺/重复、滚动行为等参见 background 配置项。窗口背景渐变Window Background Gradient自 20210814-124438-54e29167 起可以从渐变规格动态生成背景图一旦设置了window_background_gradientwindow_background_image会被忽略。支持垂直/水平方向的线性渐变config.window_background_gradient { -- Vertical 或 Horizontal指定渐变方向默认 Horizontal从左到右 -- 此外还支持 Linear 与 Radial 渐变见下方示例 orientation Vertical, -- 参与渐变插值的颜色集合接受 CSS 风格颜色规格 colors { #0f0c29, #302b63, #24243e, }, -- 也可以不写 colors改用预置渐变 -- preset Warm, -- 插值风格Linear、Basis、CatmullRom默认 Linear interpolation Linear, -- 渐变混色方式Rgb、LinearRgb、Hsv、Oklab默认 Rgb blend Rgb, -- 为避免水平渐变的垂直色带每个像素的渐变位置会随机偏移不超过 noise 值。 -- 更小或 0 的值会让色带更明显默认 64在 retina 屏上效果良好 -- noise 64, -- 默认渐变在颜色间平滑过渡可通过 segment_size 与 segment_smoothness -- 调整锐利度segment_size 控制段数segment_smoothness 控制边缘硬度 -- 0.0 为硬边1.0 为软边 -- segment_size 11, -- segment_smoothness 0.0, }线性渐变自 20220624-141144-bd1b7c5d 起沿窗口中的一条直线路径延伸可绕窗口中心旋转角度以度为单位正方向为逆时针。0度等价于从左到右的Horizontal90度等价于从下到上的Vertical180度等价于从右到左的Horizontal270度等价于自上而下的Vertical负角度等价于顺时针旋转例如-45等价于315度得到从左上角到右下角的渐变config.window_background_gradient { colors { #EEBD89, #D13ABD }, -- 指定从左上角开始的线性渐变 orientation { Linear { angle -45.0 } }, }径向渐变基于一个先验的完美圆随后拉伸以铺满窗口尺寸config.color_scheme Github config.window_background_gradient { colors { deeppink, gold }, orientation { Radial { -- 圆心 x 坐标范围 0.0-1.0默认 0.5水平居中 cx 0.75, -- 圆心 y 坐标范围 0.0-1.0默认 0.5垂直居中 cy 0.75, -- 先验圆半径默认 0.5配合默认 cx/cy 时圆位于窗口正中、 -- 边缘与窗口边缘相切大于 1 的值也是允许的 radius 1.25, }, }, }渐变由colorgradcrate 实现支持的预置渐变名包括 Blues、BrBg、BuGn、BuPu、Cividis、Cool、CubeHelixDefault、GnBu、Greens、Greys、Inferno、Magma、OrRd、Oranges、PiYg、Plasma、PrGn、PuBu、PuBuGn、PuOr、PuRd、Purples、Rainbow、RdBu、RdGy、RdPu、RdYlBu、RdYlGn、Reds、Sinebow、Spectral、Turbo、Viridis、Warm、YlGn、YlGnBu、YlOrBr、YlOrRd。完整说明见 window_background_gradient。窗口背景不透明度Window Background Opacity自 20201031-154415-9614e117 起可设置窗口背景的 alpha 值。如果操作系统提供合成compositing支持窗口背景会以半透明方式渲染让后面的窗口与桌面透出来config.window_background_opacity 0.8取值范围为0.0完全透明到1.0完全不透明默认值。该不透明度同样作用于 window_background_image 与 window_background_gradient 图层。性能将window_background_opacity设为非默认的1.0可能影响渲染性能平台支持macOS、Windows 与 Wayland 开箱即用支持合成X11 可能需要安装或配置合成窗口管理器Mutter/Wayland 下的 XWayland 无需额外配置即可工作。macOS 上不透明度低于 1.0 时窗口阴影会自动关闭可通过在window_decorations中加入MACOS_FORCE_ENABLE_SHADOW重新开启毛玻璃效果透明度可以与操作系统的模糊效果组合出磨砂玻璃质感对应 macOS、Wayland 与 Windows 的系统级 backdrop 选项。例如 macOS 上config.window_background_opacity 0.3 config.macos_window_background_blur 20在 Windows 上win32_system_backdrop需要不透明度低于 1.0 才生效其中Mica与Tabbed效果建议设为 0。使用 backdrop 效果时可能需要提高非默认背景色的不透明度以保证文字可读见下文text_background_opacity。运行时切换透明度最常见的用途是临时透视桌面再切回不透明状态可绑定快捷键return { keys { { key o, mods CTRL, action wezterm.action_callback(function(window, pane) local overrides window:get_config_overrides() or {} if not overrides.window_background_opacity then -- 尚无覆盖设置透明度 overrides.window_background_opacity 0.5 else -- 已覆盖恢复为配置中的默认值 overrides.window_background_opacity nil end window:set_config_overrides(overrides) end) }, }, }文本背景不透明度Text Background Opacity当使用背景图或背景透明度时图片内容与终端文字之间的对比度可能偏低。text_background_opacity指定非默认背景色单元格背景的 alpha 值config.text_background_opacity 0.3默认值为1.0背景完全不透明允许范围为0.0完全透明到1.0完全不透明。该选项与 window_background_opacity 的差异在于前者只作用于除默认背景色之外的单元格背景让文字承载色与壁纸之间保持更清晰的层次。小结WezTerm 的外观定制能力覆盖了从单个颜色到整窗背景的各个层次color_scheme提供开箱即用的 700 配色与自动适配深色模式能力colors段支持对任意 UI 元素做细粒度覆盖color_schemes与 TOML 文件让自定义配色可复用、可分发inactive_pane_hsb用 HSB 乘数区分窗格焦点而背景图、渐变、透明度与 Tab 栏配色则共同决定窗口的整体视觉风格。这些配置项全部在 config/src/color.rs 与 config/src/config.rs 中有对应实现——例如overlay_with()定义了colors对color_scheme的覆盖规则、compute_color_scheme_dirs()决定了配色文件的搜索路径。理解这些源码细节能帮助你在排查为什么某处颜色没生效时快速定位原因优先级、搜索目录、mux 场景限制等从而更自信地构建属于自己的一整套终端视觉方案。【免费下载链接】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),仅供参考