slidev-code-blocks

安装量: 42
排名: #17239

安装

npx skills add https://github.com/yoanbernabeu/slidev-skills --skill slidev-code-blocks

This skill covers everything about displaying code in Slidev presentations, including syntax highlighting with Shiki, line highlighting, code groups, and importing external snippets.

When to Use This Skill

  • Displaying code snippets in presentations

  • Highlighting specific lines of code

  • Creating step-by-step code reveals

  • Showing code comparisons

  • Importing code from external files

Basic Code Blocks

Simple Code Block

```javascript
function greet(name) {
  return `Hello, ${name}!`
}
### With Language Specification

Shiki supports 100+ languages:
interface User {
  id: number
  name: string
  email: string
}

def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

fn main() {
    println!("Hello, Rust!");
}
## Line Numbers

### Enable Line Numbers

```typescript {lines:true} const x = 1 const y = 2 const z = x + y


Global Configuration

In frontmatter:

---
lineNumbers: true
---

Starting Line Number

```typescript {startLine:5}
// This starts at line 5
const x = 1
## Line Highlighting

### Highlight Specific Lines

```typescript {2,3} const a = 1 const b = 2 // highlighted const c = 3 // highlighted const d = 4


Highlight Ranges

```typescript {1-3,5}
line 1  // highlighted
line 2  // highlighted
line 3  // highlighted
line 4
line 5  // highlighted
### Click-Through Highlighting

Reveal highlights step by step:

```typescript {1|2-3|5} const name = 'Slidev' // Click 1 const version = '0.50' // Click 2 const author = 'Anthony' // Click 2

console.log(name, version) // Click 3


Highlight All Then Focus

```typescript {*|1|2|3}
const a = 1
const b = 2
const c = 3
- Click 0: All lines visible

- Click 1: Line 1 highlighted

- Click 2: Line 2 highlighted

- Click 3: Line 3 highlighted

### With Final State

```typescript {1|2|all} const x = 1 const y = 2


Code Block Options

Maximum Height

```typescript {maxHeight:'200px'}
// Long code block
// with many lines
// ...
### Wrapping

```typescript {wrap:true} const veryLongLine = 'This is a very long line that would normally overflow the code block but now it wraps nicely'


Combined Options

```typescript {2-4|6-8}{lines:true,startLine:10,maxHeight:'300px'}
function example() {
  const a = 1
  const b = 2
  const c = 3

  return {
    sum: a + b + c
  }
}
## Code Themes

### Configure in setup/shiki.ts

// setup/shiki.ts import { defineShikiSetup } from '@slidev/types'

export default defineShikiSetup(() => { return { themes: { dark: 'vitesse-dark', light: 'vitesse-light', }, } })

### Popular Themes

- `vitesse-dark` / `vitesse-light`

- `dracula`

- `one-dark-pro`

- `nord`

- `material-theme`

- `github-dark` / `github-light`

## Code Groups

Show multiple code variants in tabs:

```typescript {monaco} // TypeScript version interface User { name: string }

```javascript
// JavaScript version
const user = {
  name: 'John'
}
Use `<<< ` to create tabbed code groups (experimental):

<<< @/snippets/example.ts <<< @/snippets/example.js

## Importing External Code

### Full File Import

<<< @/snippets/example.ts

### With Line Range

<<< @/snippets/example.ts#L5-10

### With Language Override

<<< @/snippets/config{json}

### With Highlighting

<<< @/snippets/example.ts {2,4}

## Diff Highlighting

Show code changes:
function greet(name: string) {
  return `Hello, ${name}!` // [!code --]
  return `Hi, ${name}!`    // [!code ++]
}
### Highlight Specific Changes
const config = {
  theme: 'dark',   // [!code highlight]
  debug: false,    // [!code warning]
  timeout: 1000,   // [!code error]
}
## TwoSlash Integration

TypeScript hover information:

```typescript twoslash const message = 'Hello' // ^?


Hover annotations:

```typescript twoslash
interface User {
  name: string
  age: number
}

const user: User = {
  name: 'John',
  age: 30
}
//    ^?
## Code Focus

### Focus Mode

Dim non-highlighted lines:

```typescript {2}{focus} const a = 1 const b = 2 // Focused, others dimmed const c = 3


Click Focus Transitions

```typescript {1|2|3}{focus}
step1()  // First focused
step2()  // Then this
step3()  // Finally this
## Inline Code

### Simple Inline

Use the useState hook for state management.

### Styled Inline

The function returns true or false.

## Code Block Styling

### Custom CSS Class

```typescript {class:'my-code'} const x = 1


.my-code {
  font-size: 0.9em;
  border-radius: 8px;
}

Scoped Styles

# Code Slide

```js
const x = 1
## Best Practices

### 1. Keep Code Concise

❌ **Too much code**
````markdown
```typescript
// Full 100-line file
✓ **Focused snippet**
````markdown
```typescript
// Just the relevant function
function handleClick() {
  setState(value => value + 1)
}
### 2. Use Meaningful Highlights

❌ **No context**
const x = 1
✓ **Guided attention**

```typescript {2} const x = 1 const important = 'focus here' // highlighted const y = 2


3. Progressive Reveal for Complex Code

```typescript {1-2|4-6|8-10}
// Step 1: Define types
interface User { name: string }

// Step 2: Create function
function greet(user: User) {
  return `Hello, ${user.name}`
}

// Step 3: Usage
const greeting = greet({ name: 'World' })
console.log(greeting)
### 4. Use Comments for Context
// BAD: Magic numbers
const delay = 1000

// GOOD: Named constants
const ANIMATION_DELAY_MS = 1000
## Common Patterns

### Before/After Comparison
// Before
function add(a, b) {
  return a + b
}

// After
const add = (a: number, b: number): number => a + b
### Step-by-Step Tutorial

```typescript {1|1-4|1-7|1-10} // Step 1: Import import { ref } from 'vue'

// Step 2: Create ref const count = ref(0)

// Step 3: Create function function increment() { count.value++ }


Output Format

When creating code slides, provide:

---
layout: default
---

# [Topic]

[Brief explanation of what the code does]

```[language] {[highlights]}{[options]}
[code]
**KEY DECISIONS:**
- Language: [chosen language]
- Highlighting: [which lines and why]
- Animation: [click sequence if any]
- Theme: [if non-default]
返回排行榜