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.customGroupsAndreaNovelHelper.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=typeaffiliation 时:
    • 支持 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,用真实的角色 typeaffiliationregex 去筛选整个角色列表
  • 不受全局的 ignoreType/ignoreAffiliation 开关影响,保证匹配准确

阶段 2:分组(Group)

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

阶段 3:其他角色(Other)

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

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

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

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

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

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

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.allRolesAndreaNovelHelper.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)字段的值会显示为对应的颜色方块图标,方便直观识别角色颜色。

角色颜色图标

工作原理

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

  • 颜色方块:如果角色对象包含 colorcolour颜色 字段,系统会在角色名称前显示一个对应颜色的方块图标
  • 图标优先级
    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角色节点不可展开,仅显示名称

鼠标悬停

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

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

打开源文件

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

在文档中使用角色

添加角色后,在文档中:

自动高亮

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

自动补全

  • 输入角色名称时会自动提示
  • TabEnter 接受建议

跳转到定义

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

敏感词和词汇

敏感词

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

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

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

词汇

用于标记特殊词汇:

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

正则表达式

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

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

这会匹配所有数字。

右键菜单

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

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

常见问题

角色没有高亮?

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

别名不生效?

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

正则表达式不匹配?

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

如何批量导入角色?

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

分组显示不正确?

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

相关功能