Skip to main content

┌─────────────────────────────────────────────┐

  1. ┌─────────────────────────────────────────────┐
    │ Refile: 00.000.0001 - 快速记录              │
    ├─────────────────────────────────────────────┤
    │ [1] personal                                │
    │ [2] work-project                            │
    │ [3] study                                   │
    │ [q] Cancel                                  │
    └─────────────────────────────────────────────┘
             ↓ 按 2
    ┌─────────────────────────────────────────────┐
    │ Refile to: work-project                     │
    ├─────────────────────────────────────────────┤
    │ [20] 项目管理                               │
    │ [21] 开发                                   │
    │ [22] 设计                                   │
    │ [+] 新建 Area                               │
    │ [q] Back                                    │
    └─────────────────────────────────────────────┘
             ↓ 按 20
    ┌─────────────────────────────────────────────┐
    │ Refile to: work-project/20                  │
    ├─────────────────────────────────────────────┤
    │ [001] 任务                                  │
    │ [002] 会议                                  │
    │ [+] 新建 Category                           │
    │ [q] Back                                    │
    └─────────────────────────────────────────────┘
             ↓ 按 001
    ✓ Moved to: work-project/20/001/20.001.0003-task-快速记录.md
    


    **关键设计**:
    - 用户只需选"要去哪个区",**不需要手动输入 ID**
    - 系统自动分配下一个可用 ID
    - 支持快捷键直接跳转(数字键选择)
    - 支持 / 搜索过滤 Namespace/Area/Category

    ### 5.5 引用自动更新(Link Refactoring)

    **问题**:Refile 导致 ID 变化时,其他文件中的引用会断裂。

    
    场景:
    1. Inbox 中有 00.000.0001(想法A)
    2. 笔记 10.002.0005 中写道:"参考 [[00.000.0001]]"
    3. Refile 后,A 变为 20.001.0003
    4. 结果:[[00.000.0001]] 成为 Dead Link
    


    解决方案:自动重构所有引用

    当执行 syn inbox move 且 ID 发生变化时,更新**两种引用形式**:

    
    1. 搜索旧 ID 的引用(使用不同策略):
       - Wiki-style 链接:Ripgrep 搜索 [[00.000.0001]]
       - Frontmatter related:SQLite 索引查询(精确匹配,避免误改)
    2. 自动替换为新 ID
    3. 将所有修改一并加入 Git Commit
    


    **实现逻辑(带安全回滚)**:

    ⚠️ **原子性保证**:Refile 涉及跨多文件修改,必须保证原子性。

    ⚠️ **安全警告**:绝对不能使用 `git reset --hard`!它会清空**所有**未提交的修改,包括与 Refile 无关的用户编辑。

    策略 A:前置检查(推荐)

    在开始 Refile 前,检查工作区是否干净: