Skip to content

角色管理 ​

⚠️ 免责声明:本文档由 GLM4.7 自动生成,内容可能存在错误或不完整之处。请以人工书写的官方文档为准。


角色管理功能帮助你管理小说中的角色、敏感词、词汇等设定。支持多种分组显示模式和自定义分组规则。

打开角色管理 ​

在 VS Code 左侧活动栏中,点击 角色图标(类似人形图标),即可打开角色管理面板。

视图类型 ​

角色管理提供两个视图:

视图说明范围
所有角色视图显示项目中加载的所有角色全局角色库
当前文章角色视图仅显示当前文档中出现的角色当前文档过滤

两个视图可以同步显示设置(在设置中开启 allRoles.syncWithDocRoles)。

当前文章角色视图 ​

当前文章角色视图专门显示当前文档中实际出现的角色,帮助你快速了解章节中涉及哪些角色。

视图位置 ​

当前文章角色视图有两个显示位置:

位置图标说明
侧边栏👤在活动栏中显示,使用 docRolesView
资源管理器👤在资源管理器面板中显示,使用 docRolesExplorerView

两个视图功能完全相同,只是显示位置不同。

核心特性 ​

按文档过滤 ​

视图仅显示在当前文档中出现的角色。当你切换文档时,视图会自动更新为新文档中的角色。

按文档保存展开状态 ​

每个文档都有独立的展开状态记录。当你:

  • 展开/折叠节点 - 状态会保存到当前文档
  • 切换文档 - 自动恢复该文档的展开状态
  • 返回文档 - 展开状态与之前一致

继承展开状态 ​

当打开一个从未访问过的文档时,可以继承上一个文档的展开状态。

在 VS Code 设置中配置 AndreaNovelHelper.docRoles.inheritExpandedFromPrevious:

设置值效果
true(默认)新文档继承上一个文档的展开状态
false新文档使用默认折叠状态

自动刷新 ​

视图会在以下情况自动刷新:

触发时机效果
切换文档更新为新文档中的角色
文档内容变化重新扫描角色并更新列表
角色定义变化更新角色属性显示

配置选项 ​

在 VS Code 设置中搜索 AndreaNovelHelper.docRoles:

配置项说明默认值
inheritExpandedFromPrevious新文档是否继承上一个文档的展开状态true
groupBy分组依据(与所有角色视图相同)affiliation
respectAffiliation是否遵循从属字段true
respectType是否遵循类型字段true
primaryGroup第一级分组方式affiliation
useCustomGroups是否启用自定义分组false
customGroups自定义分组规则[]
display.colorizeRoleName用角色颜色标记名称false
display.useRoleSvgIfPresent使用角色自定义图标false

使用场景 ​

场景 1:检查章节角色一致性 ​

写作时打开当前文章角色视图,查看章节中是否遗漏了某个重要角色,或者角色出场顺序是否合理。

场景 2:快速定位角色信息 ​

在视图中展开角色查看详情,确认角色的从属、类型等属性是否符合当前章节的设定。

场景 3:多章节角色管理 ​

在多个章节间切换时,展开状态会自动保存和恢复,方便你保持每个章节的查看偏好。

分组模式 ​

角色系统支持两种主要的分组模式:

标准分组模式 ​

根据角色属性自动分组,支持三种分组依据:

按从属分组(默认) ​

第一级按 affiliation(从属/阵营)分组,第二级按 type(类型)分组:

📁 正义阵营
  📁 主角
    👤 张三
  📁 配角
    👤 李四

📁 邪恶阵营
  📁 反派
    👤 王五

按类型分组 ​

第一级按 type(类型)分组,第二级按 affiliation(从属/阵营)分组:

📁 主角
  📁 正义阵营
    👤 张三
  📁 邪恶阵营
    👤 赵六

📁 反派
  📁 邪恶阵营
    👤 王五

不分组(扁平化) ​

所有角色平铺显示,不分层级:

📁 全部角色
  👤 张三
  👤 李四
  👤 王五
  👤 赵六

自定义分组模式 ​

根据用户定义的规则分组,支持按类型或归属模式匹配。

图形化管理(推荐) ​

使用快速设置可以图形化管理自定义分组规则,无需手动编辑配置文件。

打开方式:

  1. 使用命令 Andrea Novel Helper: 快速设置
  2. 选择 配置当前文章角色显示 或 配置全部角色显示
  3. 选择 管理自定义分组规则

管理功能:

功能说明
查看规则列出所有已创建的自定义分组规则
添加规则创建新的自定义分组
编辑规则修改现有规则的名称、匹配类型、匹配模式
删除规则删除不需要的分组规则
重置为默认恢复到默认的自定义分组配置

添加分组规则:

  1. 选择 添加新的分组规则
  2. 输入分组名称(如"主要角色")
  3. 选择匹配字段类型:
    • 归属字段 - 按 affiliation 字段匹配
    • 类型字段 - 按 type 字段匹配
  4. 输入匹配模式(用逗号分隔多个模式,如"主角,重要")

编辑分组规则:

  1. 选择要编辑的分组
  2. 可修改:
    • 分组名称
    • 匹配类型(归属/类型)
    • 匹配模式(用逗号分隔的字符串)
  3. 或选择删除该分组

默认分组规则:

选择 重置为默认规则 会恢复以下默认配置:

json5
[
  {
    name: "词汇敏感词",
    matchType: "type",
    patterns: ["词汇", "敏感词", "正则表达式"]
  },
  {
    name: "主要角色",
    matchType: "affiliation",
    patterns: ["主角", "重要", "主要"]
  },
  {
    name: "配角",
    matchType: "affiliation",
    patterns: ["配角", "次要", "其他"]
  }
]

手动配置(高级) ​

你也可以直接在 VS Code 设置中编辑 JSON 配置:

搜索 AndreaNovelHelper.allRoles.customGroups 或 AndreaNovelHelper.docRoles.customGroups:

json5
[
  {
    name: "主角组",
    matchType: "type",  // 按 type 字段匹配
    patterns: ["主角", "主角团"]
  },
  {
    name: "势力A",
    matchType: "affiliation",  // 按 affiliation 字段匹配
    patterns: ["正义阵营", "光明会"]
  }
]

规则结构:

字段类型说明
namestring分组显示名称
matchTypestring匹配类型:type(类型)或 affiliation(归属)
patternsstring[]匹配模式数组,支持多个值

自定义分组效果 ​

📁 主角组
  📁 主角
    👤 张三
  📁 配角
    👤 李四

📁 势力A
  📁 主角
    👤 张三
  📁 反派
    👤 王五

📁 其他
  📁 词汇
    📝 神剑
  📁 敏感词
    ⚠️ 重复用词

自定义分组规则原理(高级) ​

注意:本节详细解释自定义分组的工作原理,适合需要深入了解配置的高级用户。通过图形化管理(快速设置)和手动配置的效果是一样的,此处仅作为配置文件结构详解。

1. 背景与作用 ​

自定义分组功能允许你脱离内置"类型 → 归属 → 角色"三级结构,按照自己的规则(类型、归属或正则)来对角色进行分组,便于阅读、编辑和管理。

2. 配置作用域 ​

配置可分别作用于两种视图:

  1. allRoles(全部角色视图)
  2. docRoles(当前文章角色视图,侧边栏 & Explorer)

配置路径(settings.json)示例:

jsonc
"AndreaNovelHelper.docRoles.useCustomGroups": true,
"AndreaNovelHelper.docRoles.customGroups": [ /* 自定义分组列表 */ ],
"AndreaNovelHelper.allRoles.syncWithDocRoles": false,
"AndreaNovelHelper.allRoles.useCustomGroups": true,
"AndreaNovelHelper.allRoles.customGroups": [ /* … */ ]

3. 分组规则项字段 ​

每个分组项是一个 JSON 对象,关键属性:

字段类型说明
namestring组名,会展示在树视图顶层
matchTypestring匹配类型:"type" | "affiliation" | "regex"
patternstring匹配模式(见下文详细说明)
flatboolean(可选)该组下是否直接平铺(一般不手动设置)
ignoreTypeboolean(可选)是否忽略二级"类型"分层
ignoreAffiliationboolean(可选)是否忽略二级"归属"分层

pattern 字段说明:

  • 当 matchType=type 或 affiliation 时:
    • 支持 glob 模式(如 "战斗*")
    • 支持逗号分隔列表(如 "勇者公会,救世教会")
  • 当 matchType=regex 时:
    • 必须是完整的 JS 正则字面量(如 /^.*魔法.*$/)

配置示例:

jsonc
{
  "name": "战斗角色",
  "matchType": "type",
  "pattern": "战斗*,Boss"
  // 注意:一般不设置 flat,而是通过全局开关控制
},
{
  "name": "魔法势力",
  "matchType": "affiliation",
  "pattern": "魔法森林,天空学院"
},
{
  "name": "自定义关键词",
  "matchType": "regex",
  "pattern": "/^Reimu|Marisa$/"
}

4. 匹配与分组流程 ​

自定义分组的工作流程分为三个阶段:

阶段 1:匹配(Match)

  • 依照 matchType,用真实的角色 type、affiliation 或 regex 去筛选整个角色列表
  • 不受全局的 ignoreType/ignoreAffiliation 开关影响,保证匹配准确

阶段 2:分组(Group)

  • 按配置项的顺序创建顶层组
  • 匹配到的角色按全局开关决定是否在同一组内直接平铺,或继续按二级维度(类型或归属)拆分

阶段 3:其他角色(Other)

  • 将所有未命中的角色归入一个内置的"其他"分组

5. 忽略开关的效果(推荐使用) ​

全局开关是控制扁平化的主要方式:

开关效果
ignoreType=true展示时不显示二级"类型"节点,所有角色直接平铺到所属顶层组
ignoreAffiliation=true展示时不显示二级"归属"节点;若一个分组的 matchType=affiliation,并开启忽略,则所有匹配角色也会直接平铺到该组下

重要提示:这两个开关不影响匹配,只控制展示层级。

推荐做法:一般不手动设置每个分组的 flat 字段,而是通过全局的 ignoreType 和 ignoreAffiliation 开关来统一控制所有分组的扁平化行为。这样更简洁且易于管理。

6. 同步与独立 ​

  • 当 allRoles.syncWithDocRoles=true,全部角色视图使用同一套 docRoles.customGroups 规则
  • 若需两者分别管理,设为 false 并分别配置

7. 完整配置示例 ​

jsonc
// settings.json
"AndreaNovelHelper.allRoles.syncWithDocRoles": false,
"AndreaNovelHelper.allRoles.useCustomGroups": true,
"AndreaNovelHelper.allRoles.customGroups": [
  {
    "name": "主角阵营",
    "matchType": "affiliation",
    "pattern": "勇者公会,救世教会"
  },
  {
    "name": "反派",
    "matchType": "type",
    "pattern": "Boss,精英*"
  }
],
// 推荐:通过全局开关控制扁平化,而不是手动设置 flat
"AndreaNovelHelper.allRoles.ignoreType": false,
"AndreaNovelHelper.allRoles.ignoreAffiliation": true  // 所有分组都会扁平化,不显示归属二级节点

8. 注意事项 ​

  1. 正则模式要写完整字面量,不能省略 /.../
  2. flat 字段可选且不常用;一般通过全局 ignoreType/ignoreAffiliation 开关来控制扁平化
  3. 如果一个角色同时命中多个组,按配置项先后顺序归入第一个匹配组
  4. 未在 customGroups 中定义的角色会自动进入"其他"组
  5. 修改分组配置后,可通过命令面板 "配置:全部角色显示" 或 "配置:当前文章角色显示" 立即刷新视图

分级控制 ​

通过以下设置可以控制分组层级:

遵循从属 ​

  • 启用:使用角色的 affiliation 字段进行分组
  • 禁用:忽略从属字段,该层级扁平化

遵循类型 ​

  • 启用:使用角色的 type 字段进行分组
  • 禁用:忽略类型字段,该层级扁平化

第一级分组 ​

当"遵循从属"和"遵循类型"都启用时,决定第一级使用哪个字段:

设置效果
归属优先第一级按归属,第二级按类型
类型优先第一级按类型,第二级按归属

特殊类型处理 ​

以下角色类型会被特殊处理,单独显示在根目录:

  • 敏感词 - 需要标记的词汇(如重复用词)
  • 词汇 - 特殊词汇、术语
  • 正则表达式 - 使用正则模式匹配

它们会被抽离到"词汇 / 敏感词 / 正则表达式"根节点下:

🔖 词汇 / 敏感词 / 正则表达式
  📝 词汇
    📁 正义阵营
      📝 神剑
  ⚠️ 敏感词
    📁 (未分组)
      ⚠️ 重复用词
  🔧 正则表达式
    📁 (未分组)
      🔧 连续数字

自定义分组模式下,特殊类型不会被抽离,而是按照自定义规则显示。

配置选项 ​

在 VS Code 设置中搜索 AndreaNovelHelper.allRoles 或 AndreaNovelHelper.docRoles:

配置项说明默认值
groupBy分组依据:affiliation(按从属)/ type(按类型)/ none(不分组)affiliation
respectAffiliation是否遵循从属字段进行分组true
respectType是否遵循类型字段进行分组true
primaryGroup第一级分组:affiliation(归属优先)/ type(类型优先)affiliation
useCustomGroups是否启用自定义分组模式false
customGroups自定义分组规则数组[]
display.colorizeRoleName用角色颜色标记名称false
display.useRoleSvgIfPresent使用角色自定义图标false
syncWithDocRoles(仅 allRoles)是否同步当前文章角色的显示设置true
details.enableRoleExpansion是否允许角色节点展开查看详情true
details.wrapColumn详情折行列数20

快速设置 ​

使用命令 Andrea Novel Helper: 快速设置 可以快速调整角色显示:

  • 分组依据
  • 遵循从属/遵循类型
  • 第一级分组
  • 自定义分组
  • 显示选项

角色类型 ​

类型说明
主角主要角色
配角次要角色
联动角色来自其他作品的角色
敏感词需要标记的词汇(如重复用词)
词汇特殊词汇、术语
正则表达式使用正则模式匹配

添加角色 ​

方法一:从选中文本添加(推荐) ​

  1. 在文档中选中角色名称
  2. 右键点击选中的文本
  3. 选择 Andrea Novel Helper: 从选中文本添加角色
  4. 选择或创建角色文件
  5. 选择角色类型
  6. 填写角色信息:
    • 从属标签(可选)
    • 角色简介(可选)
    • 颜色(可选)
  7. 确认添加

方法二:直接编辑角色文件 ​

  1. 在角色管理面板中双击角色
  2. 或右键选择 打开源文件
  3. 按照文件格式添加角色

角色属性 ​

基础属性 ​

每个角色可以包含以下基础属性:

属性类型必需说明
namestring✅角色名称
typestring✅角色类型
uuidstring❌唯一标识符 (UUID v7)
affiliationstring❌从属标签(如阵营)
aliasesstring[]❌别名数组
descriptionstring❌角色简介
colorstring❌颜色(如 #E60033)
styleobject❌文本样式(新字段)
wordSegmentFilterboolean❌是否启用分词过滤
regexstring❌正则表达式(仅正则类型)
regexFlagsstring❌正则标志(仅正则类型)
prioritynumber❌着色器优先级
fixesstring[]❌修复候选(仅敏感词)

自定义键值对支持 ​

角色模型支持完整的自定义键值对存储,可以在 扩展信息 (extended) 和 自定义字段 (custom) 中添加任意属性。

支持的数据类型:

  • string - 字符串
  • number - 数字
  • boolean - 布尔值
  • null - 空值
  • string[] - 字符串数组

扩展信息 (extended) - 预定义的自定义字段:

json5
{
  name: "张三",
  type: "主角",
  extended: {
    年龄: 25,
    身高: 175,
    职业: "冒险者",
    技能: ["剑术", "魔法"],
    性格: "开朗勇敢"
  }
}

自定义字段 (custom) - 完全自由的键值对:

json5
{
  name: "张三",
  type: "主角",
  custom: {
    tags: ["主角", "男性", "战士"],
   登场章节: "第一章",
    重要程度: 5,
    created: "2024-01-01",
    note: "核心角色"
  }
}

角色卡管理器提供了可视化界面来管理这些自定义字段。

角色文件格式 ​

JSON5 格式 ​

json5
[
    {
        name: "张三",
        type: "主角",
        color: "#E60033",
        affiliation: "正义阵营",
        aliases: ["小张", "阿三"],
        description: "故事的主角"
    }
]

Markdown 格式 ​

markdown
# 张三

- 类型: 主角
- 颜色: #E60033
- 从属: 正义阵营
- 别名: 小张、阿三
- 描述: 故事的主角
- 分类: 自定义分类

OJSON5 格式 ​

一种更简洁的 JSON5 变体:

json5
{
    张三: {
        type: "主角",
        color: "#E60033"
    }
}

查看角色详情 ​

展开角色节点 ​

点击角色名称左侧的 > 图标即可展开查看角色的所有属性。

展开后显示的内容包括:

1. 优先级信息(如果有) ​

  • ⚡ 总优先级 - 角色的最终计算优先级(数字越小优先级越高)
  • 📄 文件优先级 - 角色定义文件中的优先级设置
  • 📊 优先级构成 - 优先级计算来源的详细分解

2. 基础属性 ​

  • 📝 名称 - 角色名称
  • 🆔 UUID - 角色唯一标识符
  • 🏷️ 类型 - 角色类型

3. 其他属性 ​

以下属性按字母顺序显示:

图标属性说明
🎨颜色角色高亮颜色
🏠从属阵营/归属
📛️别名别名数组
📝描述角色简介
🔧修复敏感词的替换建议
⚡优先级着色器优先级
📝分词过滤是否启用分词过滤
🔍正则正则表达式模式
🔍正则标志正则表达式标志
📁包路径角色包路径
📄源文件角色定义文件路径
🖼️图标自定义图标路径

对象和数组展开 ​

如果属性的值是对象或数组类型,可以继续展开查看:

  • 数组 - 显示为 数组[n],展开后显示每个元素
  • 对象 - 显示为 对象{n个属性},展开后显示所有键值对
  • 空数组/空对象 - 显示为 空数组 或 空对象,不可展开

配置详情折行宽度 ​

调整原因 ​

受限于 VS Code TreeView 的 DOM 控制,角色详情的描述是通过手动拆分为多行文本实现的。如果你的侧边栏宽度与默认不同,可能需要调整折行宽度。

宽度示例 ​

设置值效果
过窄一行显示不完全,文字被截断
正常文字正常折行,充分利用空间
过宽浪费空间,留白过多

调整步骤 ​

  1. 打开快速设置面板

    • 使用命令 Andrea Novel Helper: 快速设置
    • 选择 配置当前文章角色显示 或 配置全部角色显示
  2. 找到 详情折行行数 设置

  3. 设置为一个合适的数值(5-200)

    • 默认值: 20 字符
    • 推荐值: 根据侧边栏宽度调整
  4. 点击 确定 保存设置

  5. 手动刷新视图查看效果

注意: 当前版本设置完宽度后需要手动刷新才能应用,将在后续版本中支持自动刷新。

颜色字段特殊显示 ​

"颜色"(color)字段的值会显示为对应的颜色方块图标,方便直观识别角色颜色。

角色颜色图标 ​

工作原理 ​

为角色提供视觉化的颜色标识,提升界面辨识度:

  • 颜色方块:如果角色对象包含 color、colour 或 颜色 字段,系统会在角色名称前显示一个对应颜色的方块图标
  • 图标优先级:
    1. 角色自带的 SVG 图标(如果启用 useRoleSvgIfPresent)
    2. 颜色方块(14x14 像素圆角矩形)
    3. 文件类型图标(默认)

颜色方块样式 ​

  • 尺寸: 14x14 像素
  • 样式: 圆角矩形
  • 支持: 透明度和边框
  • 效果: 提供良好的视觉反馈

配置开关 ​

在 VS Code 设置中配置:

配置项说明默认值
AndreaNovelHelper.docRoles.display.colorizeRoleName当前文章角色是否启用颜色标记false
AndreaNovelHelper.allRoles.display.colorizeRoleName所有角色是否启用颜色标记false
AndreaNovelHelper.roles.details.useRoleSvgIfPresent优先使用角色自定义 SVG 图标false

颜色格式 ​

支持的颜色格式:

json5
{
  color: "#E60033"           // 十六进制
  color: "rgb(230, 0, 51)"    // RGB
  color: "rgba(230, 0, 51, 1)" // RGBA
}

角色详情展开功能 ​

功能说明 ​

角色节点支持展开显示详细信息,便于快速查看和编辑角色属性:

展开机制 ​

点击角色节点旁边的展开图标(▶),可查看该角色的所有属性。

属性显示规则 ​

  • name 字段置顶:名称始终在第一位显示
  • 其他属性按字母排序:便于快速查找
  • 长文本截断:超长文本会被截断,完整内容在悬停提示中显示
  • 多级展开:对象和数组类型的值可以继续展开

展开内容分类 ​

1. 基础信息

  • 名称(name)
  • UUID(uuid)
  • 类型(type)

2. 显示属性

  • 颜色(color)
  • 从属(affiliation)
  • 别名(aliases)
  • 描述(description)

3. 扩展属性

  • 优先级(priority)
  • 分词过滤(wordSegmentFilter)
  • 正则表达式(regex, regexFlags)
  • 修复建议(fixes)

4. 元数据

  • 包路径(packagePath)
  • 源文件(sourcePath)

文本折行控制 ​

长文本(如描述)会自动折行显示,折行宽度可通过 AndreaNovelHelper.roles.details.wrapColumn 配置。

配置开关 ​

在 VS Code 设置中配置:

配置项说明默认值
AndreaNovelHelper.roles.details.enableRoleExpansion是否允许角色节点展开查看详情true
AndreaNovelHelper.roles.details.wrapColumn详情折行列数(5-200)20

快速操作 ​

  • 展开/折叠单个角色:点击角色左侧的 ▶/▼ 图标
  • 展开/折叠所有:使用右键菜单或快捷键(如已配置)
  • 查看完整信息:鼠标悬停在属性值上查看完整内容

启用/禁用角色展开 ​

在 VS Code 设置中配置 AndreaNovelHelper.roles.details.enableRoleExpansion:

设置值效果
true(默认)角色节点可以展开查看详情
false角色节点不可展开,仅显示名称

鼠标悬停 ​

鼠标悬停在角色上会显示:

  • 角色名称
  • 类型
  • 描述
  • 其他属性

打开源文件 ​

  • 双击角色
  • 或右键选择 打开源文件
  • 会打开角色定义文件

在文档中使用角色 ​

添加角色后,在文档中:

自动高亮 ​

  • 角色名称会自动高亮显示
  • 根据角色类型使用不同颜色

自动补全 ​

  • 输入角色名称时会自动提示
  • 按 Tab 或 Enter 接受建议

跳转到定义 ​

  • 右键点击角色名称
  • 选择 转到定义
  • 跳转到角色定义

敏感词和词汇 ​

敏感词 ​

用于标记需要注意的词汇:

  • 重复用词
  • 不合适的词汇
  • 需要替换的词语

敏感词会以特殊方式标记,并可提供修复建议。

词汇 ​

用于标记特殊词汇:

  • 专有名词
  • 技术术语
  • 自创词汇

正则表达式 ​

使用正则表达式模式匹配:

regex: "\\d+"
regexFlags: "g"

这会匹配所有数字。

右键菜单 ​

在角色管理面板中右键点击角色:

菜单项说明
打开源文件打开角色定义文件
复制名称复制角色名称到剪贴板
刷新刷新角色列表
在文档中查找搜索该角色在当前文档中的出现

常见问题 ​

角色没有高亮? ​

  1. 确认角色已添加
  2. 检查角色名称拼写
  3. 确认扩展功能已启用
  4. 尝试刷新角色列表

别名不生效? ​

  1. 检查别名是否正确添加
  2. 确认没有启用"分词过滤"(某些情况下会误过滤)

正则表达式不匹配? ​

  1. 检查正则语法是否正确
  2. 确认标志设置(如 gi)
  3. 使用正则测试工具验证

如何批量导入角色? ​

  1. 创建 JSON5 文件
  2. 按格式填写角色信息
  3. 保存到角色目录
  4. 刷新角色列表

分组显示不正确? ​

  1. 检查 groupBy 设置
  2. 检查 respectAffiliation 和 respectType 设置
  3. 确认角色字段是否正确填写
  4. 尝试刷新角色列表

相关功能 ​