内容提要
作者为Chaos主题新增code_vars功能:在Front Matter中声明可替换参数,代码块保留合法示例值,浏览器自动生成可填写面板并同步替换全文,复制即可得到修改后的命令;同时处理了词法边界、正则变形、URL参数同步及来源警告等细节。此外更新了系列目录、UTC时间戳、等宽时间显示,并修复打印和深色模式问题。
延伸解读
为什么用合法示例值而非占位符
文章对比了两种传统做法:写<DOMAIN>这类占位符虽醒目,但非法语法会破坏代码高亮,在RSS或无JavaScript环境下显示支离破碎;写example.net等保留字面量虽合法,却需读者自行分辨替换。code_vars选择后者,在Front Matter声明可替换参数,代码块保持合法示例,浏览器再生成面板同步替换。这兼顾了无脚本环境的可读性与交互时的便利。
自动派生正则形态的实用边界
作者发现同一参数在普通命令与awk正则中形态不同:点号需转义为\.,空格分隔列表需变为|分支。code_vars据此自动派生两种匹配模式并双向正规化,读者改一处即可同步全文。这减少了手工改正则时漏反斜杠或多竖线的风险。但该机制仅覆盖这两种固定变形,更复杂的转写并未支持,作者也明确放弃了注入JavaScript的方案。
URL参数同步的安全权衡
参数确认后会通过history.replaceState写入查询字符串,便于保存书签或分享预填链接。但这也带来风险:收到带参数链接的人可能误以为屏幕上的命令就是原文内容。因此主题对来自URL的参数使用警告色横幅、输入框边框和代码块标签加以区分,并自动展开参数面板;读者一旦手动编辑,标记即清除。所有值经textContent写入,避免HTML注入。
近期其他改动的实际影响
除code_vars外,系列文章新增按时间正序的目录卡片,/series/索引页按最近更新时间以时间轴呈现。RSS与sitemap时间戳统一输出UTC,避免不同时区构建产生不同字符串,浏览器端再转本地时区显示;页面time元素改用等宽字体子集对齐日期列,并新增showTime选项。打印方面修复了深色模式下Mermaid节点印成黑块的问题,深色模式评论框闪烁和正文两端对齐也得到处理。
Q&A
Chaos主题的code_vars功能是什么?它解决了技术文档中的什么问题?
code_vars是Chaos主题新增的可交互示例参数功能。它允许在文章Front Matter中声明可替换参数,代码块中保留合法示例值,浏览器自动生成可填写面板并同步替换全文,读者填写后复制即可得到修改后的命令。这解决了技术文档中示例命令需要读者手动查找替换参数、容易漏改或出错的问题。
如何在文章中使用code_vars?需要哪些配置?
在文章开头的YAML Front Matter中声明code_vars列表,每个变量包含name(变量名)、default(示例默认值)和desc(说明)。代码块中直接书写合法的默认值字面量,无需特殊标记。浏览器会加载code-vars.js,在第一个命中参数的代码块上方插入可折叠的「示例参数」面板,并将匹配到的示例值包裹为<var>元素。
code_vars如何处理正则表达式中的参数变形?
code_vars会自动处理两种常见的正则变形:一是点号转义(. ↔ \.),当默认值包含点号时自动派生转义版本;二是空格分隔列表与正则分支(a b c ↔ a|b|c),当默认值由空白分隔的多个词条时自动派生竖线连接形式。这两种派生是双向的,无论读者在面板修改还是原地编辑正则,脚本都会先正规化再按各处形态输出。
通过URL参数修改code_vars时,如何防止读者误以为命令是原文内容?
code_vars对来自URL的参数做了醒目的警告提示:界面切换到警告色(浅色模式为蘇芳色#9E3D3F配薄桜底色,深色模式为退紅色#D69090),「示例参数」面板自动展开并显示警告横幅「以下参数来自链接,非作者原文。」,输入框边框和所有对应位置的下划线染上警告色,每个受影响的代码块左上角挂警告色「参数来自链接」标签。读者自己编辑后,该字段的fromUrl标记清除,退回普通「参数已修改」状态。
code_vars如何避免误替换和破坏语法高亮?
code_vars在初始化时用TreeWalker遍历容器内的文本节点,拼出完整文本并记录偏移,匹配后按倒序用DOM Range包裹成<var>元素,避免破坏语法高亮标签。匹配时按默认值长度从长到短优先,并检查词法边界,例如默认IP 192.0.2.1不会误匹配192.0.2.10的前缀,密钥名dhcpd-key不会命中my-dhcpd-key。
除了code_vars,Chaos主题近期还有哪些更新?
近期更新包括:系列文章目录与时间轴索引(系列文章末尾加目录卡片,重做/series/索引页按最近更新时间排序);XML时间格式统一为UTC并配合XSLT本地化显示,<time>元素改用等宽字体子集,新增showTime选项;修复深色模式下打印Mermaid流程图变黑块、Remark42评论框闪浅色背景的问题,并恢复正文两端对齐。