基本款:語法高亮
在三個反引號後面寫語言名稱,Spectra 就會自動幫你上色。右上角會出現語言標籤和複製按鈕。
寫法:
```python
def hello():
print("Hello, World!")
```
效果:
from pathlib import Path
def find_large_files(directory, threshold_mb=100):
"""找出指定目錄下超過門檻的檔案。"""
large = []
for f in Path(directory).rglob("*"):
if f.is_file() and f.stat().st_size > threshold_mb * 1024 * 1024:
large.append((f.name, f.stat().st_size / (1024 * 1024)))
return sorted(large, key=lambda x: x[1], reverse=True)
試試看按右上角的複製按鈕,貼出來不會帶到行號。
加上行號
在語言名稱後面加 {linenos=true},就會出現行號。左上角的 # 按鈕可以切換行號顯示。
寫法:
```go {linenos=true}
package main
func main() {
fmt.Println("hello")
}
```
效果:
| |
高亮特定行
用 hl_lines 指定要高亮的行號。可以寫單行或範圍,被高亮的行會有明顯的邊框標記。
寫法:
```typescript {linenos=true,hl_lines=[4,"8-12"]}
// 第 4 行和第 8 到 12 行會被高亮
```
效果(注意第 4 行和第 8-12 行):
| |
顯示檔名
在程式碼區塊的前一行加上 <!-- file: 檔名 --> 這個 HTML 註解,檔名就會取代右上角的語言標籤。
寫法:
<!-- file: src/utils/debounce.ts -->
```typescript
export function debounce(fn, delay) {
// ...
}
```
效果:
export function debounce<T extends (...args: unknown[]) => void>(
fn: T,
delay: number
): (...args: Parameters<T>) => void {
let timer: ReturnType<typeof setTimeout>
return (...args: Parameters<T>) => {
clearTimeout(timer)
timer = setTimeout(() => fn(...args), delay)
}
}
再一個例子:
version: "3.8"
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
volumes:
- ./data:/app/data
全部組合起來
檔名 + 行號 + 高亮行,三個可以同時用。
寫法:
<!-- file: middleware/ratelimit.go -->
```go {linenos=true,hl_lines=["5-6","14-16"]}
package middleware
// ...
```
效果:
| |
支援的語言
隨便列幾個常用的,基本上主流語言都支援:
# 看看哪些 port 被佔用了
lsof -i -P -n | grep LISTEN
# 找出最大的 10 個檔案
du -ah . | sort -rh | head -10
.post-card {
background: var(--bg-surface);
border: 1px solid var(--border);
border-radius: var(--radius);
&:hover {
border-color: var(--accent);
box-shadow: 0 0 24px var(--accent-glow);
}
}
{
"name": "spectra",
"version": "1.0.0",
"description": "A sci-fi Hugo theme",
"keywords": ["hugo", "theme", "sci-fi"]
}
好的程式碼區塊不只是好看,它讓讀者願意停下來讀。
