1. 为什么鼠须管的皮肤值得单独折腾
用 macOS 自带输入法的人,大概率都有过这种体验:候选词框要么白底黑字毫无个性,要么跟随系统深色模式但字体大小、圆角、阴影全都不受自己控制。而鼠须管(Squirrel)作为一款基于 Rime 引擎的 macOS 输入法前端,最大的特点就是一切皆可配置——包括输入法皮肤。它的皮肤系统不是简单的"换张背景图",而是通过 YAML 配置文件,对候选词窗口的圆角、边框、阴影、字体、颜色、透明度、间距等几十个参数进行像素级控制。
这意味着什么?意味着你可以把候选框做成类似系统原生 Spotlight 的毛玻璃质感,也可以做成极简的纯色方块,甚至可以让它根据输入状态动态改变颜色。但问题也恰恰出在这里:鼠须管的皮肤配置参数多、文档分散、不同版本之间还有差异,很多人第一次打开squirrel.custom.yaml时完全不知道从哪下手。我见过太多人复制了一份网上的配置,结果候选框直接消失,或者颜色变成诡异的荧光绿,最后只能删掉配置重来。
这篇内容就是来解决这个问题的。我会把鼠须管皮肤配置的完整逻辑拆开讲清楚——从配置文件的位置、每个参数的实际效果,到几套可以直接抄作业的完整皮肤方案,再到配色时容易踩的坑。无论你是刚装上鼠须管的新手,还是想深度定制但被参数劝退的老用户,都能在这里找到能直接用的东西。整套内容基于 macOS 平台和鼠须管 0.16 及以上版本,配置方式在 0.18 上同样适用。
2. 皮肤配置文件的正确打开方式
2.1 配置文件到底放在哪
鼠须管的用户配置目录在~/Library/Rime/,注意这个路径在 Finder 里默认是隐藏的。你可以用快捷键Command + Shift + G打开"前往文件夹",粘贴这个路径直接跳转。目录里会有一堆.yaml文件,其中和皮肤直接相关的是squirrel.custom.yaml。如果这个文件不存在,自己新建一个就行,文件名必须完全一致,包括大小写。
这里有个很多人会忽略的细节:不要直接改squirrel.yaml。那个是程序自带的默认配置,每次升级鼠须管都会被覆盖。正确的做法是在squirrel.custom.yaml里写配置,这个文件里的内容会覆盖默认值。配置写完后需要重新部署才能生效——点击菜单栏的鼠须管图标,选择"重新部署",或者用快捷键Control + Option + ~调出菜单再选。部署过程中如果配置有语法错误,候选框会直接不显示,这时候别慌,把配置文件里的内容清空再部署一次就能恢复。
2.2 配置文件的整体结构
squirrel.custom.yaml的结构是固定的,所有皮肤相关的配置都写在patch:下面。一个最简结构长这样:
patch: style: color_scheme: my_scheme font_point: 16 corner_radius: 8 preset_color_schemes: my_scheme: name: 我的皮肤 back_color: 0xFFFFFF text_color: 0x000000 candidate_text_color: 0x333333 hilited_candidate_back_color: 0x4A90D9 hilited_candidate_text_color: 0xFFFFFFstyle下面控制的是全局的样式参数,比如字体大小、圆角、透明度这些和具体配色无关的东西。preset_color_schemes下面定义的是配色方案,每个方案有自己的名字和一组颜色值。color_scheme这个字段用来指定当前使用哪个配色方案,值就是你在preset_color_schemes里定义的键名。
2.3 颜色值的写法规则
鼠须管里的颜色用的是ARGB 十六进制格式,注意是 ARGB 不是 RGBA。前两位是透明度(Alpha),0x00是全透明,0xFF是全不透明,后面六位才是 RGB。比如0xFF4A90D9表示不透明的蓝色,0x804A90D9表示半透明的蓝色。很多人从网上抄配置时发现颜色不对,十有八九是把 ARGB 当成了 RGBA 来写。
另外,颜色值前面的0x不能省略,也不能写成#。我试过用#FFFFFF这种 CSS 风格的写法,鼠须管直接忽略这个字段,候选框会用默认颜色,而且不会有任何报错提示,排查起来很费时间。
3. 每个样式参数到底控制什么
3.1 字体与排版相关参数
font_point控制候选词的字体大小,单位是 pt。这个值设得太大会导致候选框超出屏幕边缘,太小又看不清。我个人的经验是 13 到 18 之间比较合适,具体取决于你的屏幕分辨率和缩放设置。font_face用来指定字体名称,比如PingFang SC或者SF Pro Text,不写的话会用系统默认字体。
candidate_format是一个容易被忽略但很有用的参数,它控制候选词的显示格式。默认值是"%c. %@",意思是"序号 + 点 + 空格 + 候选词"。你可以改成"%c %@"去掉那个点,或者改成"%@"只显示候选词不显示序号。不过去掉序号后,用数字键选词时会不太直观,这个取舍看个人习惯。
line_spacing控制候选词之间的行间距,spacing控制候选框内文字与边框的距离。这两个参数配合调整能让候选框看起来更透气。我一般会把spacing设在 8 到 12 之间,line_spacing设在 4 到 8 之间。
3.2 边框、圆角与阴影
corner_radius是圆角半径,值越大越圆。想要完全直角就设 0,想要胶囊形状就设成候选框高度的一半左右。border_height和border_width分别控制边框的上下和左右宽度,注意这两个参数只影响边框的粗细,不影响颜色——边框颜色是由配色方案里的border_color决定的。
shadow_size控制阴影大小,shadow_color控制阴影颜色。阴影这个东西在浅色背景下效果明显,在深色背景下几乎看不出来。如果你用的是深色皮肤,可以把shadow_size设小一点甚至设成 0,省得浪费渲染性能。shadow_offset_x和shadow_offset_y控制阴影的偏移方向,默认是向右下偏移,改成负值可以向左上偏移。
3.3 透明度与模糊效果
translucency这个参数控制候选框的整体透明度,值在 0 到 1 之间。设成true会启用半透明效果,但具体透明度还是由配色方案里的back_color的 Alpha 通道决定。也就是说,如果你想让候选框半透明,需要同时做两件事:把translucency设为true,并且把back_color的 Alpha 值设成小于0xFF。
blur_radius控制背景模糊半径,这个参数只在translucency为true时生效。值越大模糊效果越明显,但也会增加 GPU 负担。我实测下来,blur_radius设在 10 到 20 之间效果比较自然,超过 30 会明显感觉到候选框弹出时有延迟。
color_space这个参数比较冷门,它控制颜色空间,默认是srgb。如果你发现颜色显示和预期有偏差,可以试试改成display_p3,在支持广色域的屏幕上颜色会更准确。
4. 几套可以直接用的完整皮肤方案
4.1 极简白底方案
这套方案适合喜欢干净界面的人,候选框是纯白底、深灰字、浅灰边框,选中项用蓝色高亮。整体风格接近系统原生输入法,但圆角和间距更舒服。
patch: style: color_scheme: minimal_white font_point: 16 corner_radius: 10 border_height: 0 border_width: 0 spacing: 10 line_spacing: 6 shadow_size: 4 shadow_color: 0x20000000 preset_color_schemes: minimal_white: name: 极简白 back_color: 0xFFFFFFFF border_color: 0xE0E0E0 text_color: 0x333333 candidate_text_color: 0x333333 hilited_candidate_back_color: 0x4A90D9 hilited_candidate_text_color: 0xFFFFFF comment_text_color: 0x999999这套配置里我把border_height和border_width都设成了 0,因为白色背景下边框容易显得脏。阴影用了很淡的黑色(Alpha 值0x20),让候选框有轻微的悬浮感但不突兀。
4.2 深色毛玻璃方案
这套方案适合深色模式用户,候选框是半透明深灰底、白色字,带背景模糊效果,选中项用橙色高亮。整体质感接近 macOS 的毛玻璃效果。
patch: style: color_scheme: dark_blur font_point: 16 corner_radius: 12 translucency: true blur_radius: 15 spacing: 12 line_spacing: 6 shadow_size: 8 shadow_color: 0x40000000 preset_color_schemes: dark_blur: name: 深色毛玻璃 back_color: 0xCC2D2D2D border_color: 0x40FFFFFF text_color: 0xFFFFFF candidate_text_color: 0xE0E0E0 hilited_candidate_back_color: 0xFF8C42 hilited_candidate_text_color: 0xFFFFFF comment_text_color: 0x808080注意back_color的 Alpha 值是0xCC,大约是 80% 不透明度,配合blur_radius: 15就能出毛玻璃效果。border_color用了半透明白色,在深色背景上能勾出一个很细的亮边,增加层次感。
4.3 高对比度护眼方案
这套方案适合长时间打字的人,背景用了低饱和度的米黄色,文字是深棕色,减少蓝光刺激。选中项用深绿色高亮,整体对比度适中不刺眼。
patch: style: color_scheme: eye_care font_point: 17 corner_radius: 8 spacing: 10 line_spacing: 8 shadow_size: 0 preset_color_schemes: eye_care: name: 护眼米黄 back_color: 0xFFF5F0E1 border_color: 0xFFD7CFC0 text_color: 0xFF4A3F35 candidate_text_color: 0xFF4A3F35 hilited_candidate_back_color: 0xFF2E7D5B hilited_candidate_text_color: 0xFFFFFFFF comment_text_color: 0xFF8A7F70这套方案里我把shadow_size设成了 0,因为米黄色背景本身就很柔和,加阴影反而显得多余。字体大小调到了 17,比默认稍大一点,长时间看眼睛不容易累。
5. 配色时最容易踩的五个坑
5.1 候选框直接消失不见
这是最常见的问题,原因通常是配置文件语法错误。YAML 对缩进极其敏感,必须用空格不能用 Tab,同一层级的缩进必须完全一致。我建议用 VS Code 或者 Sublime Text 这类支持 YAML 语法高亮的编辑器来写配置,缩进错了会直接标红。另外,如果color_scheme指定的方案名在preset_color_schemes里找不到,候选框也会不显示。排查方法是先把squirrel.custom.yaml内容全部清空,部署一次确认输入法正常,再逐段加回配置。
5.2 颜色和预期完全不一样
前面提过,鼠须管用的是 ARGB 不是 RGBA。如果你从设计工具里复制了一个#4A90D9的颜色,直接写进去会变成 Alpha 值为0x4A的半透明色,看起来就是颜色变淡了。正确的写法是0xFF4A90D9。另外,有些在线颜色工具输出的十六进制不带 Alpha,你需要自己补上0xFF前缀。
5.3 半透明效果不生效
translucency和back_color的 Alpha 值必须配合使用。只设translucency: true但back_color的 Alpha 是0xFF,候选框依然是不透明的。反过来,只把back_color设成半透明但translucency是false,也不会有透明效果。两个条件缺一不可。
5.4 字体设置后没变化
font_face里写的字体名称必须是系统里真实安装的字体,而且要用字体的 PostScript 名称或者家族名称。比如"苹方"要写PingFang SC,"思源黑体"要写Source Han Sans SC。写错了不会报错,但字体会回退到系统默认。你可以在"字体册"应用里查看字体的准确名称。
5.5 部署后配置没生效
鼠须管的配置修改后必须重新部署才会生效。有时候部署了但没变化,可能是因为配置文件里有缓存。可以试试先切换到其他输入法再切回来,或者重启一下鼠须管进程。如果还是不行,检查一下是不是改错了文件——必须是squirrel.custom.yaml,不是squirrel.yaml,也不是default.custom.yaml。
6. 进阶玩法:让皮肤跟着场景变
6.1 根据输入模式切换配色
鼠须管支持根据不同的输入方案(比如拼音、双拼、五笔)使用不同的皮肤。你可以在squirrel.custom.yaml里针对特定方案写配置:
patch: "style/color_scheme@luna_pinyin": dark_blur "style/color_scheme@double_pinyin": minimal_white这样用拼音时是深色毛玻璃,切换到双拼时自动变成极简白。这个功能在需要区分中英文输入场景时特别有用,比如写代码时用一套低调的皮肤,写文档时用另一套更醒目的。
6.2 用脚本动态生成配色
如果你对颜色有极致追求,可以用 Python 脚本读取系统当前壁纸的主色调,然后自动生成一套匹配的皮肤配色。思路是用PIL库提取壁纸的主色,再根据主色计算互补色和对比色,最后写入squirrel.custom.yaml并触发重新部署。这个玩法稍微复杂一点,但效果很惊艳——你的输入法皮肤会随着壁纸自动变化。
6.3 皮肤配置的版本管理
鼠须管的配置文件是纯文本,非常适合用 Git 做版本管理。我建议把整个~/Library/Rime/目录纳入 Git 仓库,每次调整皮肤后提交一次。这样万一改坏了可以随时回滚,换电脑时也能一键同步所有配置。注意.gitignore里要排除掉*.userdb这类用户词库文件,那些是二进制格式而且体积很大。
7. 我个人的几条实操心得
折腾鼠须管皮肤这些年,有几个经验是文档里不会写的。第一,不要一次性改太多参数。每次只调一两个值,部署后看效果,确认没问题再继续。一次性改十几个参数,出了问题根本不知道是哪个引起的。第二,善用注释。YAML 支持#注释,把你每个参数为什么设成这个值写在旁边,过几个月回头看还能想起来。第三,备份原始配置。在改任何东西之前,先把squirrel.custom.yaml复制一份到桌面,改坏了直接覆盖回来,比一点点排查快得多。
还有一点关于性能的观察:blur_radius和shadow_size这两个参数对渲染性能影响最大。如果你用的是老款 Mac,建议把blur_radius控制在 10 以内,shadow_size控制在 5 以内。我实测在 2015 款 MacBook Pro 上,blur_radius设到 25 时,候选框弹出会有肉眼可见的延迟。另外,translucency开启后,候选框的渲染会走 GPU 合成路径,在连接外接显示器时偶尔会出现闪烁,这个目前没有完美的解决办法,只能把透明度调高一点来缓解。
最后分享一个快速预览配色的小技巧:你不需要每次都部署才能看效果。可以先把配色方案写进squirrel.custom.yaml,然后打开"文本编辑"应用,随便打几个字触发候选框,这时候改配置文件并保存,再重新部署,候选框会立即刷新。这样调整颜色的效率比反复切换应用高很多。