Expressive Code 示例

1094 字
5 分钟
Expressive Code 示例
2026-02-16
2026-04-24

下面集中展示 Expressive Code 在 FangYuan 中的代码块效果。示例主要整理自官方文档,方便直接对照查看渲染结果。

Expressive Code#

语法高亮#

Syntax Highlighting

常规语法高亮#

console.log("这段代码启用了语法高亮!")

渲染 ANSI 转义序列#

Terminal window
ANSI colors:
- Regular: Red Green Yellow Blue Magenta Cyan
- Bold: Red Green Yellow Blue Magenta Cyan
- Dimmed: Red Green Yellow Blue Magenta Cyan
256 colors (showing colors 160-177):
160 161 162 163 164 165
166 167 168 169 170 171
172 173 174 175 176 177
Full RGB colors:
ForestGreen - RGB(34, 139, 34)
Text formatting: Bold Dimmed Italic Underline

编辑器与终端边框#

Editor & Terminal Frames

代码编辑器边框#

my-test-file.js
console.log("标题属性示例")

src/content/index.html
<div>文件名注释示例</div>

终端边框#

Terminal window
echo "这个终端边框没有标题"

PowerShell 终端示例
Write-Output "这个终端边框带有标题!"

覆写边框类型#

echo "看,这里没有边框!"

PowerShell 配置文件.ps1
# 如果不手动覆写,这里默认会显示成终端边框
function Watch-Tail { Get-Content -Tail 20 -Wait $args }
New-Alias tail Watch-Tail

文本与行标记#

Text & Line Markers

标记整行与行区间#

// 第 1 行 - 通过行号命中
// 第 2 行
// 第 3 行
// 第 4 行 - 通过行号命中
// 第 5 行
// 第 6 行
// 第 7 行 - 通过区间 "7-8" 命中
// 第 8 行 - 通过区间 "7-8" 命中

选择行标记类型(mark、ins、del)#

line-markers.js
function demo() {
console.log("这一行会被标记为删除")
// 这一行和下一行会被标记为新增
console.log("这是第二行新增内容")
return "这一行使用默认的中性标记类型"
}

给行标记添加标签#

labeled-line-markers.jsx
<button
role="button"
{...props}
value={value}
className={buttonClassName}
disabled={disabled}
active={active}
>
{children &&
!active &&
(typeof children === "string" ? <span>{children}</span> : children)}
</button>

使用单独一行显示长标签#

labeled-line-markers.jsx
<button
role="button"
{...props}
value={value}
className={buttonClassName}
disabled={disabled}
active={active}
>
{children &&
!active &&
(typeof children === "string" ? <span>{children}</span> : children)}
</button>

使用 diff 风格语法#

这一行会被标记为新增
这一行会被标记为删除
这一行是普通内容

--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
+这是一份真正的 diff 文件
-所有内容都会保持原样
不会额外删除任何空白字符

结合语法高亮与 diff 风格语法#

function thisIsJavaScript() {
// 这一整段都会按照 JavaScript 语法高亮,
// 同时依然可以叠加 diff 标记!
console.log("旧代码将被移除")
console.log("这里换成新的代码")
}

标记行内的局部文本#

function demo() {
// 可以在一行中标记任意指定文本
return "支持对指定文本进行多次匹配";
}

正则表达式#

console.log("yesyep 这两个单词都会被标记。")

转义正斜杠#

Terminal window
echo "测试" > /home/test.txt

选择行内标记类型(mark、ins、del)#

function demo() {
console.log("这里演示新增删除两种行内标记");
// return 语句会使用默认标记类型
return true;
}

自动换行#

Word Wrap

按代码块配置换行#

// 启用自动换行的示例
function getLongString() {
return "这是一段非常长的字符串,除非容器足够宽,否则大概率放不进可见区域"
}

// 禁用自动换行的示例
function getLongString() {
return "这是一段非常长的字符串,除非容器足够宽,否则大概率放不进可见区域"
}

配置换行后的缩进#

// preserveIndent 示例(默认启用)
function getLongString() {
return "这是一段非常长的字符串,除非容器足够宽,否则大概率放不进可见区域"
}

// preserveIndent=false 示例
function getLongString() {
return "这是一段非常长的字符串,除非容器足够宽,否则大概率放不进可见区域"
}

可折叠区块#

Collapsible Sections

5 collapsed lines
// 这一段样板初始化代码会被折叠
import { someBoilerplateEngine } from "@example/some-boilerplate"
import { evenMoreBoilerplate } from "@example/even-more-boilerplate"
const engine = someBoilerplateEngine(evenMoreBoilerplate())
// 这部分代码默认会展开显示
engine.doSomething(1, 2, 3, calcFn)
function calcFn() {
// 可以在同一个代码块里设置多个折叠区
3 collapsed lines
const a = 1
const b = 2
const c = a + b
// 这一行会保持可见
console.log(`计算结果:${a} + ${b} = ${c}`)
return c
}
4 collapsed lines
// 从这里到代码块结尾会再次折叠
engine.closeConnection()
engine.freeMemory()
engine.shutdown({ reason: "示例样板代码结束" })

行号#

Line Numbers

按代码块显示行号#

// 这个代码块会显示行号
console.log("这里是第 2 行")
console.log("这里是第 3 行")

// 这个代码块关闭了行号
console.log("你好")
console.log("现在你知道我在第几行了吗?")

修改起始行号#

console.log("这里是第 5 行")
console.log("这里是第 6 行")
Expressive Code 示例
https://fangyuan.oogoo.top/expressive-code/
作者
FangYuan
发布于
2026-02-16
许可协议
MIT