跳转到主要内容

添加代码示例

你可以添加行内代码片段或代码块。代码块支持用于语法高亮、标题、行高亮、icon 等的元选项,及其他功能。

行内代码

要将某个 wordphrase 标记为代码,请用反引号(`)将其包裹。
要将`单词``短语`标记为代码,请用反引号(`)将其包围。

代码块

使用围栏代码块,将代码置于三个反引号内。代码块可复制;如果启用了 AI 助手,用户可以让 AI 解释代码。 为语法高亮和启用元选项指定编程语言。在语言标识后添加任意元选项,如 icon。
class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

代码块选项

向代码块添加元选项以自定义其外观。
在添加任何其他元选项之前,必须先为代码块指定编程语言。

选项语法

  • 字符串和布尔选项:可以用 ""'',或不加引号进行包裹。
  • 表达式选项:可以用 {}"",或 '' 进行包裹。

语法高亮

在代码块的起始反引号后指定编程语言即可启用语法高亮。 我们使用 Shiki 实现语法高亮,支持所有可用语言。完整语言列表请参见 Shiki 文档中的语言 docs.json 中通过 styling.codeblocks 全局自定义代码块主题。可设置 systemdark 等简单主题,或为明暗模式配置自定义的 Shiki 主题。配置项参见 Settings
如需自定义主题,请在 docs.json 中将主题设为 "css-variables",并使用以 --mint- 为前缀的 CSS 变量覆盖语法高亮颜色。可用变量如下:基础颜色
  • --mint-color-text: 默认文本颜色
  • --mint-color-background: 背景颜色
Token 颜色
  • --mint-token-constant: 常量和字面量
  • --mint-token-string: 字符串值
  • --mint-token-comment: 注释
  • --mint-token-keyword: 关键字
  • --mint-token-parameter: 函数参数
  • --mint-token-function: 函数名
  • --mint-token-string-expression: 字符串表达式
  • --mint-token-punctuation: 标点符号
  • --mint-token-link: 链接
ANSI 颜色
  • --mint-ansi-black, --mint-ansi-black-dim
  • --mint-ansi-red, --mint-ansi-red-dim
  • --mint-ansi-green, --mint-ansi-green-dim
  • --mint-ansi-yellow, --mint-ansi-yellow-dim
  • --mint-ansi-blue, --mint-ansi-blue-dim
  • --mint-ansi-magenta, --mint-ansi-magenta-dim
  • --mint-ansi-cyan, --mint-ansi-cyan-dim
  • --mint-ansi-white, --mint-ansi-white-dim
  • --mint-ansi-bright-black, --mint-ansi-bright-black-dim
  • --mint-ansi-bright-red, --mint-ansi-bright-red-dim
  • --mint-ansi-bright-green, --mint-ansi-bright-green-dim
  • --mint-ansi-bright-yellow, --mint-ansi-bright-yellow-dim
  • --mint-ansi-bright-blue, --mint-ansi-bright-blue-dim
  • --mint-ansi-bright-magenta, --mint-ansi-bright-magenta-dim
  • --mint-ansi-bright-cyan, --mint-ansi-bright-cyan-dim
  • --mint-ansi-bright-white, --mint-ansi-bright-white-dim
class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

Twoslash

在 JavaScript 和 TypeScript 代码块中,使用 twoslash 可启用交互式类型信息。用户可以像在 IDE 中一样,将鼠标悬停在变量、函数和参数上以查看类型和错误。
type  = "cat" | "dog" | "hamster";

function (: string, : ) {
return `${} the ${} is now adopted!`;
}

// Hover to see the inferred types
const  = ("Mintie", "cat");

为你的代码示例添加一个标题。使用 title="Your title",或在单独一行写入一个字符串。
const hello = "world";

图标

使用 icon 属性为代码块添加图标。参见 图标 以查看所有可用选项。
const hello = "world";

行高亮

在代码块中,使用带有行号或范围的 highlight 来高亮特定行。
const greeting = "Hello, World!";
function sayHello() {
  console.log(greeting);
}
sayHello();

行聚焦

在代码块中使用 focus 并配合行号或范围来突出显示特定行。
const greeting = "Hello, World!";
function sayHello() {
  console.log(greeting);
}
sayHello();

显示行号

使用 lines 在代码块左侧显示行号。
const greeting = "Hello, World!";
function sayHello() {
  console.log(greeting);
}
sayHello();

可展开

使用 expandable 让用户展开或折叠较长的代码块。
from datetime import datetime, timedelta
from typing import Dict, List, Optional
from dataclasses import dataclass

@dataclass
class Book:
title: str
author: str
isbn: str
checked_out: bool = False
due_date: Optional[datetime] = None

class Library:
def **init**(self):
self.books: Dict[str, Book] = {}
self.checkouts: Dict[str, List[str]] = {} # patron -> list of ISBNs

    def add_book(self, book: Book) -> None:
        if book.isbn in self.books:
            raise ValueError(f"Book with ISBN {book.isbn} already exists")
        self.books[book.isbn] = book

    def checkout_book(self, isbn: str, patron: str, days: int = 14) -> None:
        if patron not in self.checkouts:
            self.checkouts[patron] = []

        book = self.books.get(isbn)
        if not book:
            raise ValueError("Book not found")

        if book.checked_out:
            raise ValueError("Book is already checked out")

        if len(self.checkouts[patron]) >= 3:
            raise ValueError("Patron has reached checkout limit")

        book.checked_out = True
        book.due_date = datetime.now() + timedelta(days=days)
        self.checkouts[patron].append(isbn)

    def return_book(self, isbn: str) -> float:
        book = self.books.get(isbn)
        if not book or not book.checked_out:
            raise ValueError("Book not found or not checked out")

        late_fee = 0.0
        if datetime.now() > book.due_date:
            days_late = (datetime.now() - book.due_date).days
            late_fee = days_late * 0.50

        book.checked_out = False
        book.due_date = None

        # Remove from patron's checkouts
        for patron, books in self.checkouts.items():
            if isbn in books:
                books.remove(isbn)
                break

        return late_fee

    def search(self, query: str) -> List[Book]:
        query = query.lower()
        return [
            book for book in self.books.values()
            if query in book.title.lower() or query in book.author.lower()
        ]

def main():
library = Library()

    # Add some books
    books = [
        Book("The Hobbit", "J.R.R. Tolkien", "978-0-261-10295-4"),
        Book("1984", "George Orwell", "978-0-452-28423-4"),
    ]

    for book in books:
        library.add_book(book)

    # Checkout and return example
    library.checkout_book("978-0-261-10295-4", "patron123")
    late_fee = library.return_book("978-0-261-10295-4")
    print(f"Late fee: ${late_fee:.2f}")

if **name** == "**main**":
main()

换行

使用 wrap 为长行启用换行。这样可避免水平滚动,并使长行更易读。
const greeting = "Hello, World! I am a long line of text that will wrap to the next line.";
function sayHello() {
  console.log(greeting);
}
sayHello();

差异

在代码块中以可视化方式展示新增或删除的行。新增行以绿色高亮,删除行以红色高亮。 要创建差异,请在代码块的行尾添加以下特殊注释:
  • // [!code ++]:将该行标记为新增(绿色高亮)。
  • // [!code --]:将该行标记为删除(红色高亮)。
对于多行连续的情况,可在冒号后指定行数:
  • // [!code ++:3]:将当前行及其后两行标记为新增。
  • // [!code --:5]:将当前行及其后四行标记为删除。
注释语法必须与所用编程语言一致(例如,JavaScript 使用 //,Python 使用 #)。
const greeting = "Hello, World!"; 
function sayHello() {
  console.log("Hello, World!"); 
  console.log(greeting); 
}
sayHello();

CodeBlock 组件

在自定义 React 组件中使用 <CodeBlock>,以编程方式渲染与 Markdown 代码块相同样式和功能的代码块。

属性

language
string
用于语法高亮的编程语言。
filename
string
显示在代码块标题中的文件名。
icon
string
显示在代码块标题中的 icon。可用选项参见 图标
lines
boolean
是否显示行号。
wrap
boolean
是否对代码块进行换行显示。
expandable
boolean
是否可展开代码块。
highlight
string
需要高亮的行。提供数字的字符串化数组。示例:"[1,3,4,5]"
focus
string
需要聚焦的行。提供数字的字符串化数组。示例:"[1,3,4,5]"

示例

export const CustomCodeBlock = ({ filename, icon, language, highlight, children }) => {
  return (
    <CodeBlock
      filename={filename}
      icon={icon}
      language={language}
      lines
      highlight={highlight}
    >
      {children}
    </CodeBlock>
  );
};