代码高亮
基于 Shiki 的代码高亮,构建时预渲染为静态 HTML。
示例
Rustuse std::future::Future;async fn map_concurrent<T, U, F, Fut>(items: Vec<T>, f: F) -> Vec<U>where F: Fn(T) -> Fut, Fut: Future<Output = U>,{ futures::future::join_all(items.into_iter().map(f)).await}
Markdown```rustuse std::future::Future;async fn map_concurrent<T, U, F, Fut>(items: Vec<T>, f: F) -> Vec<U>where F: Fn(T) -> Fut, Fut: Future<Output = U>,{ futures::future::join_all(items.into_iter().map(f)).await}```
运行时
浅色模式使用 GitHub Light Default 主题,深色模式使用 GitHub Dark Default 主题。
可通过 vp/config/runtime.ts 的 server.highlight 自定义主题:
TypeScriptexport default { server: { highlight: { light: 'github-light-default', dark: 'github-dark-default', }, },};
light 或 dark 缺失、主题不存在或加载失败时,会使用默认主题。
支持主题
Shiki 提供了数十种主题,详情参考 Shiki 官方文档。
高级用法
行高亮
在代码块语言后添加 {行号},可以高亮指定行。支持单行、多个行号和连续范围。
TypeScriptconst name = 'VanillaPress';const version = '1.5';export function info() { return `${name}@${version}`;}
Markdown```ts {2,4-6}const name = 'VanillaPress';const version = '1.5';export function info() { return `${name}@${version}`;}```
也可以使用 [!code highlight]。写在代码行末尾时作用于当前行;独占注释行时作用于下一行。标记会在构建时移除,不会出现在最终 HTML 中。
TypeScriptconst name = 'VanillaPress';const version = '1.5';export function info() { return `${name}@${version}`;}
Markdown```tsconst name = 'VanillaPress';const version = '1.5'; // [!code highlight]export function info() { // [!code highlight:3] return `${name}@${version}`;}```
[!code highlight:3] 表示从目标行开始,连续高亮 3 行。
聚焦代码
使用 [!code focus] 可以突出关键代码,并弱化同一代码块中的其他行。
TypeScriptconst name = 'VanillaPress';const version = '1.5';export function info() { return `${name}@${version}`;}
Markdown```tsconst name = 'VanillaPress';const version = '1.5'; // [!code focus]export function info() { return `${name}@${version}`; // [!code focus]}```
同样支持连续行写法:
TypeScriptexport function createApp() { const app = {}; return app;}
Markdown```tsexport function createApp() { // [!code focus:3] const app = {}; return app;}```
代码块中的颜色差异
使用 [!code ++] 和 [!code --] 表示新增和删除行,适合展示修改前后的差异。
TypeScriptconst theme = 'github-light-default';const darkTheme = 'github-dark-default';const darkTheme = 'github-dark-high-contrast';
Markdown```tsconst theme = 'github-light-default';const darkTheme = 'github-dark-default'; // [!code --]const darkTheme = 'github-dark-high-contrast'; // [!code ++]```
高亮错误和警告
使用 [!code warning] 和 [!code error] 标记警告或错误行。
TypeScriptfunction loadTheme(theme?: string) { if (!theme) return 'github-light-default'; if (theme === 'unknown') throw new Error('Invalid theme'); return theme;}
Markdown```tsfunction loadTheme(theme?: string) { if (!theme) return 'github-light-default'; // [!code warning] if (theme === 'unknown') throw new Error('Invalid theme'); // [!code error] return theme;}```
行号
在代码块语言后添加 line-numbers 可以显示行号。
TypeScriptexport const siteName = 'VanillaPress';export const version = '1.5';
Markdown```ts line-numbersexport const siteName = 'VanillaPress';export const version = '1.5';```
也可以指定起始行号:
TypeScriptexport function mount() { return true;}
Markdown```ts line-numbers=10export function mount() { return true;}```