580 字
3 分钟
增强Fuwari的代码块功能
2025-09-17
统计加载中...

使用现在最新的🍥Fuwari博客已经引入了astro-expressive-code包,不需要额外安装了,直接使用就完事了

折叠与行数都已经配置好了,@expressive-code/plugin-collapsible-sections@expressive-code/plugin-line-numbers 不用额外安装

使用格式方法#

标题#

标题
console.log("Line 1");
console.log("Line 2");
let a = 1;
let b = 2;

高亮指定行#

console.log("Line 1");
console.log("Line 2");
let a = 1;
let b = 2;
let c = 3;
let d = 4;
let e = 5;
let f = 6;
let g = 7;
console.log(a + b);
let h = 4;
let i = 5;
let j = 6;
let k = 7;
let l = 7;

新增/删除指定行#

console.log("Line 1");
console.log("Line 2");
let a = 1;
let b = 2;
let c = 3;
let d = 4;
let e = 5;
let f = 6;
let g = 7;
console.log(a + b);
let h = 4;
let i = 5;
let j = 6;
let k = 7;
let l = 7;

高亮块#

```js "a + b" del="let g = 7"
//{2,4-5}高亮 ins={3,7}新增 del={6}删除
console.log("Line 1");
console.log("Line 2");
let a = 1;
let b = 2;
let c = 3;
let d = 4;
let e = 5;
let f = 6;
let g = 7;
console.log(a + b);
let h = 4;
let i = 5;
let j = 6;
let k = 7;
let l = 7;

折叠代码/代码行数#

//collapse={8-13, 15-16} 折叠 startLineNumber=7
console.log("Line 1");
console.log("Line 2");
let a = 1;
let b = 2;
let c = 3;
let d = 4;
6 collapsed lines
let e = 5;
let f = 6;
let g = 7;
console.log(a + b);
let h = 4;
let i = 5;
let j = 6;
2 collapsed lines
let k = 7;
let l = 7;

代码块标识#

这是一个Expressive Code的插件,增加代码块的语言标识图标

安装依赖包
# 使用 npm
npm install @xt0rted/expressive-code-file-icons --save
# 如果用 pnpm(从报错中的 .pnpm 来看可能是你的包管理器)
pnpm add @xt0rted/expressive-code-file-icons

这是博主的设置,修改样式后需删除项目里的📁.astro,并重启项目才能看到效果

astro.config.mjs
import { pluginFileIcons } from "@xt0rted/expressive-code-file-icons";
export default defineConfig({
// ...
integrations: [
// ...
expressiveCode({
themes: ["catppuccin-frappe", "light-plus"],
plugins: [pluginCollapsibleSections(), pluginLineNumbers(),
pluginFileIcons({
iconClass: "text-4 w-5 inline mr-1 mb-1",
titleClass: ""
})
],
}),
]
})
提醒

不过有些标识图标不适用双主题,比如 Astro 下面是博主的临时解决办法(针对Astro)

src\components\LightDarkSwitch.svelte
onMount(() => {
mode = getStoredTheme();
updateAstroSvg(mode);
const darkModePreference = window.matchMedia("(prefers-color-scheme: dark)");
const changeThemeWhenSchemeChanged: Parameters<
typeof darkModePreference.addEventListener<"change">
>[1] = (_e) => {
applyThemeToDocument(mode);
};
darkModePreference.addEventListener("change", changeThemeWhenSchemeChanged);
return () => {
darkModePreference.removeEventListener(
"change",
changeThemeWhenSchemeChanged,
);
};
});
function switchScheme(newMode: LIGHT_DARK_MODE) {
mode = newMode;
setTheme(newMode);
updateAstroSvg(mode);
}
function updateAstroSvg(mode: LIGHT_DARK_MODE) {
const spans = document.querySelectorAll('figcaption > .title')
spans.forEach(span => {
if (!span || !span.innerHTML.includes('astro')) return
const paths = span.querySelectorAll('svg > path')
if (mode === DARK_MODE){
paths[1].setAttribute('fill', '#fff')
}
else{
paths[1].setAttribute('fill', '#000')
}
})
}
增强Fuwari的代码块功能
https://pengxing.dpdns.org/posts/增强fuwari的代码块功能/
作者
鹏星
发布于
2025-09-17
许可协议
CC BY-NC-SA 4.0