# HTML JS 字符串编辑避坑指南

## 问题

在含大量引号转义的 `<script>` 内嵌 JS 的 HTML 文件中做代码修改时，
`patch` 和 `sed` 工具几乎必然失败。

## 根因

HTML JS 字符串中 `\\\"`、`\\\\"`、`'\\''` 等转义超过3层，
patch 工具的模糊匹配算法无法正确解析。

## 工作流（已验证多次）

### Stage 1: 小修改（<5行，唯一匹配）
```bash
patch old_string="..." new_string="..." path=file.html
```

### Stage 2: 中等修改（5-50行）
```bash
python3 << 'PYEOF'
with open('file.html') as f: html=f.read()
html=html.replace(unique_target, replacement)  # ← 必须唯一
with open('file.html','w') as f: f.write(html)
PYEOF
```

### Stage 3: 大修改（>50行或涉及多层转义）
```bash
python3 << 'PYEOF'
# 1. 构建完整的正确内容
new_content = """...全部新代码..."""
# 2. 找函数边界
start = html.find('function renderTodos(){')
end = html.find('function exportTodos(){')
# 3. 完整替换
html = html[:start] + new_content + html[end:]
with open('file.html','w') as f: f.write(html)
PYEOF
```

### Stage 4: 文件彻底损坏时
```bash
# 直接完整重写文件
write_file path=file.html content='...'
```

## 关键铁律

1. **replace_all=true 绝对不用**于变量名/函数名/字符串声明的替换 — 会污染所有同名位置
2. **Python heredoc (`<< 'PYEOF'`)** 用于多行字符串 — 无转义困扰
3. **Python `-c` 模式** 几乎不要用 — 与 shell 引号嵌套是噩梦
4. **sed 修改 HTML** 仅用于删除整行（`sed -i '' '/pattern/d'`），不用于替换
5. **patch 失败2次 → 切到 write_file**

## 本次会话血泪史

- 尝试用 `patch` 给 TODO 渲染加批注列 → 5次 replace_all 匹配失败
- 改用 Python 字符串替换 → `\\\"` 转义层级错误，产生孤儿 else-if
- `sed` 删除孤儿代码 → 误删 loadTodos 中的合法代码
- 最终：Python `write_file` 完整重写 27000 字 → 一次通过 `node --check`
