返回 slidev
code-groups.md
根目录 / docs / features / code-groups.md
1 ---
2 depends:
3 - guide/syntax#code-block
4 tags: [codeblock]
5 description: |
6 Group multiple code blocks and automatically match icon by the title name.
7 ---
8
9 # Code Groups
10
11 > [!NOTE]
12 > This feature requires [Comark Syntax](/features/comark#comark-syntax). Enable `comark: true` to use it.
13
14 You can group multiple code blocks like this:
15
16 ````md
17 ::code-group
18
19 ```sh [npm]
20 npm i @slidev/cli
21 ```
22
23 ```sh [yarn]
24 yarn add @slidev/cli
25 ```
26
27 ```sh [pnpm]
28 pnpm add @slidev/cli
29 ```
30
31 ::
32 ````
33
34 ## Title Icon Matching
35
36 `code groups`, `code block` and [`Shiki Magic Move`](/features/shiki-magic-move) also supports the automatically icon matching by the title name.
37
38 ![code-groups-demo](/assets/code-groups-demo.png)
39
40 ::: info
41
42 By default, we provide some built-in icons, you can use them by install [@iconify-json/vscode-icons](https://www.npmjs.com/package/@iconify-json/vscode-icons).
43
44 :::
45
46 ::: details All built-in icons
47
48 ```js
49 const builtinIcons = {
50 // package managers
51 'pnpm': 'i-vscode-icons:file-type-light-pnpm',
52 'npm': 'i-vscode-icons:file-type-npm',
53 'yarn': 'i-vscode-icons:file-type-yarn',
54 'bun': 'i-vscode-icons:file-type-bun',
55 'deno': 'i-vscode-icons:file-type-deno',
56 // frameworks
57 'vue': 'i-vscode-icons:file-type-vue',
58 'svelte': 'i-vscode-icons:file-type-svelte',
59 'angular': 'i-vscode-icons:file-type-angular',
60 'react': 'i-vscode-icons:file-type-reactjs',
61 'next': 'i-vscode-icons:file-type-light-next',
62 'nuxt': 'i-vscode-icons:file-type-nuxt',
63 'solid': 'logos:solidjs-icon',
64 'astro': 'i-vscode-icons:file-type-light-astro',
65 // bundlers
66 'rollup': 'i-vscode-icons:file-type-rollup',
67 'webpack': 'i-vscode-icons:file-type-webpack',
68 'vite': 'i-vscode-icons:file-type-vite',
69 'esbuild': 'i-vscode-icons:file-type-esbuild',
70 // configuration files
71 'package.json': 'i-vscode-icons:file-type-node',
72 'tsconfig.json': 'i-vscode-icons:file-type-tsconfig',
73 '.npmrc': 'i-vscode-icons:file-type-npm',
74 '.editorconfig': 'i-vscode-icons:file-type-editorconfig',
75 '.eslintrc': 'i-vscode-icons:file-type-eslint',
76 '.eslintignore': 'i-vscode-icons:file-type-eslint',
77 'eslint.config': 'i-vscode-icons:file-type-eslint',
78 '.gitignore': 'i-vscode-icons:file-type-git',
79 '.gitattributes': 'i-vscode-icons:file-type-git',
80 '.env': 'i-vscode-icons:file-type-dotenv',
81 '.env.example': 'i-vscode-icons:file-type-dotenv',
82 '.vscode': 'i-vscode-icons:file-type-vscode',
83 'tailwind.config': 'vscode-icons:file-type-tailwind',
84 'uno.config': 'i-vscode-icons:file-type-unocss',
85 'unocss.config': 'i-vscode-icons:file-type-unocss',
86 '.oxlintrc': 'i-vscode-icons:file-type-oxlint',
87 'vue.config': 'i-vscode-icons:file-type-vueconfig',
88 // filename extensions
89 '.mts': 'i-vscode-icons:file-type-typescript',
90 '.cts': 'i-vscode-icons:file-type-typescript',
91 '.ts': 'i-vscode-icons:file-type-typescript',
92 '.tsx': 'i-vscode-icons:file-type-typescript',
93 '.mjs': 'i-vscode-icons:file-type-js',
94 '.cjs': 'i-vscode-icons:file-type-js',
95 '.json': 'i-vscode-icons:file-type-json',
96 '.js': 'i-vscode-icons:file-type-js',
97 '.jsx': 'i-vscode-icons:file-type-js',
98 '.md': 'i-vscode-icons:file-type-markdown',
99 '.py': 'i-vscode-icons:file-type-python',
100 '.ico': 'i-vscode-icons:file-type-favicon',
101 '.html': 'i-vscode-icons:file-type-html',
102 '.css': 'i-vscode-icons:file-type-css',
103 '.scss': 'i-vscode-icons:file-type-scss',
104 '.yml': 'i-vscode-icons:file-type-light-yaml',
105 '.yaml': 'i-vscode-icons:file-type-light-yaml',
106 '.php': 'i-vscode-icons:file-type-php',
107 }
108 ```
109
110 :::
111
112 ## Custom Icons
113
114 You can use any name from the [iconify](https://icones.js.org) collection by using the `~icon~` syntax, for example:
115
116 ````md
117 ```js [npm ~i-uil:github~]
118 console.log('Hello, GitHub!')
119 ```
120 ````
121
122 To make it work, you need to:
123
124 1. Install the icon's collection.
125
126 :::code-group
127
128 ```sh [npm]
129 npm add @iconify-json/uil
130 ```
131
132 ```sh [yarn]
133 yarn add @iconify-json/uil
134 ```
135
136 ```sh [pnpm]
137 pnpm add @iconify-json/uil
138 ```
139
140 ```sh [bun]
141 bun add @iconify-json/uil
142 ```
143
144 :::
145
146 2. Add the icon to the `uno.config.ts` file.
147
148 ```ts [uno.config.ts] {4-6}
149 import { defineConfig } from 'unocss'
150
151 export default defineConfig({
152 safelist: [
153 'i-uil:github',
154 ],
155 })
156 ```
157
157 lines MARKDOWN