Skip to content

Code Block

Code blocks - Material for MkDocs

Configuration

将以下行添加到 mkdocs.yml 中:

markdown_extensions:
  - pymdownx.highlight:
      anchor_linenums: true
      line_spans: __span
      pygments_lang_class: true
  - pymdownx.inlinehilite
  - pymdownx.snippets
  - pymdownx.superfences

查看其他配置选项:

代码复制按钮

代码块可以自动在右侧渲染一个按钮,允许用户将代码块的内容复制到剪贴板。将以下内容添加到 mkdocs.yml 以全局启用它们:

theme:
  features:
    - content.code.copy

代码选择按钮

代码块可以包含一个按钮,允许用户选择行范围,这非常适合链接到代码块的特定子部分。这允许用户动态应用行突出显示。将以下内容添加到 mkdocs.yml 以全局启用它:

theme:
  features:
    - content.code.select

Usage

添加标题

bubble_sort.py
def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]

添加注释

代码注释可以放置在代码块中的任何位置,只要该位置允许使用该代码块语言的注释即可。

void main()
{
    func() // (1)
}
  1. 🙋‍♂️ 这是一个func函数

如希望去除代码注释周围的注释字符,只需在代码注释的右括号后添加一个 ! :

void main()
{
    func() // (1)!
}

  1. 🙋‍♂️ 这是一个func函数

添加行号

通过在短代码后直接使用 linenums="<start>" 选项为代码块添加行号,其中 <start> 表示起始行号。代码块可以从 1 以外的行号开始,这样可以分割大型代码块以提高可读性:

1
2
3
4
5
def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]

高亮特定行

通过将行号传递给位于语言简码之后的 hl_lines 参数,可以突出显示特定的行。行数从 1 开始计数,无论指定为 linenums的起始行号是多少:

Code block with highlighted lines
``` py hl_lines="2 3"
def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]
```
1
2
3
4
5
def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]
Code block with highlighted line range
``` py hl_lines="3-5"
def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]
```
1
2
3
4
5
def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]

高亮内联代码块

当启用 InlineHilite 时,可以通过在内联代码块前加上一个 #! ,然后紧跟相应的语言简码,来将语法高亮应用于内联代码块。

`` markdown title="Inline code block" The#!python range()` function is used to generate a sequence of numbers.

<div class="result" markdown>

The `#!python range()` function is used to generate a sequence of numbers.

</div>

### 嵌入外部文件

启用代码片段后,可以通过直接在代码块中使用 --8<-- 符号来嵌入来自其他文件(包括源文件)的内容:

```` markdown title="Code block with external content"
``` title=".browserslistrc"
--8<-- ".browserslistrc"
````

title=".browserslistrc" last 4 years