Expressive Code 示例
1094 字
5 分钟
Expressive Code 示例
下面集中展示 Expressive Code 在 FangYuan 中的代码块效果。示例主要整理自官方文档,方便直接对照查看渲染结果。
Expressive Code
语法高亮
常规语法高亮
console.log("这段代码启用了语法高亮!")渲染 ANSI 转义序列
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 165166 167 168 169 170 171172 173 174 175 176 177
Full RGB colors:ForestGreen - RGB(34, 139, 34)
Text formatting: Bold Dimmed Italic Underline编辑器与终端边框
代码编辑器边框
console.log("标题属性示例")<div>文件名注释示例</div>终端边框
echo "这个终端边框没有标题"Write-Output "这个终端边框带有标题!"覆写边框类型
echo "看,这里没有边框!"# 如果不手动覆写,这里默认会显示成终端边框function Watch-Tail { Get-Content -Tail 20 -Wait $args }New-Alias tail Watch-Tail文本与行标记
标记整行与行区间
// 第 1 行 - 通过行号命中// 第 2 行// 第 3 行// 第 4 行 - 通过行号命中// 第 5 行// 第 6 行// 第 7 行 - 通过区间 "7-8" 命中// 第 8 行 - 通过区间 "7-8" 命中选择行标记类型(mark、ins、del)
function demo() { console.log("这一行会被标记为删除") // 这一行和下一行会被标记为新增 console.log("这是第二行新增内容")
return "这一行使用默认的中性标记类型"}给行标记添加标签
<button role="button" {...props} value={value} className={buttonClassName} disabled={disabled} active={active}> {children && !active && (typeof children === "string" ? <span>{children}</span> : children)}</button>使用单独一行显示长标签
<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("yes 和 yep 这两个单词都会被标记。")转义正斜杠
echo "测试" > /home/test.txt选择行内标记类型(mark、ins、del)
function demo() { console.log("这里演示新增与删除两种行内标记"); // return 语句会使用默认标记类型 return true;}自动换行
按代码块配置换行
// 启用自动换行的示例function getLongString() { return "这是一段非常长的字符串,除非容器足够宽,否则大概率放不进可见区域"}// 禁用自动换行的示例function getLongString() { return "这是一段非常长的字符串,除非容器足够宽,否则大概率放不进可见区域"}配置换行后的缩进
// preserveIndent 示例(默认启用)function getLongString() { return "这是一段非常长的字符串,除非容器足够宽,否则大概率放不进可见区域"}// preserveIndent=false 示例function getLongString() { return "这是一段非常长的字符串,除非容器足够宽,否则大概率放不进可见区域"}可折叠区块
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: "示例样板代码结束" })行号
按代码块显示行号
// 这个代码块会显示行号console.log("这里是第 2 行")console.log("这里是第 3 行")// 这个代码块关闭了行号console.log("你好")console.log("现在你知道我在第几行了吗?")修改起始行号
console.log("这里是第 5 行")console.log("这里是第 6 行")