# CharacterCount · 字数统计与上限

通过 editor.storage.characterCount 读取字符与词数，也可限制输入长度。默认按字符串长度计字符、空格分词；中文分词需要自定义计数函数。

通过 editor.storage.characterCount 读取字符与词数，也可限制输入长度。默认按字符串长度计字符、空格分词；中文分词需要自定义计数函数。

`@quirekit/extensions` · **MIT**

## 编辑器适用范围
层次：**共享文档能力**
| 编辑器 | 状态 | 所需装配与边界 |
| --- | --- | --- |
| Classic | 需适配 | 需由宿主连接本页所列服务、目标与生命周期，并验证所选 View 和文档模型。核心接口可复用，但没有一段无宿主参数的通用产品安装代码。 |
| Block | 直接支持 | [createBlockEditorPreset](/plugins/reference/create-block-editor-preset) — createBlockEditor 默认预设已装配此能力。通过 preset 中对应子项配置；图形编辑使用预设注入的工作区，宿主仍负责保存和资源。不要重复安装同名扩展。 |

“直接支持”指已有上述产品装配；具体交互、宿主服务和格式支持仍有各自条件。[状态与接入规则](/plugins/compatibility)。许可独立显示。

## 接入

```sh
pnpm add @quirekit/extensions@alpha
```

在创建 Editor 时放入 `extensions`。挂载容器、视图和保存由宿主提供，见[快速开始](/guide/quick-start)。

```ts
import { CharacterCount } from '@quirekit/extensions'

const counter = CharacterCount.configure({ limit: 5000 })
```

安装时按包声明选择兼容版本，外部可用版本以分发源为准。本站使用工作区 Alpha；许可标签来自入口所属包，使用条件见[支持与许可](/support)。

## 按编辑器接入

以下片段沿用已挂载的宿主元素 `element`，宿主负责容器尺寸与保存；退出页面时调用 `instance.destroy()`。已有预设装配的能力不要再重复追加；需要宿主端口的入口应先完成下方配置。

### Classic

需由宿主连接本页所列服务、目标与生命周期，并验证所选 View 和文档模型。核心接口可复用，但没有一段无宿主参数的通用产品安装代码。

### Block

createBlockEditor 默认预设已装配此能力。通过 preset 中对应子项配置；图形编辑使用预设注入的工作区，宿主仍负责保存和资源。不要重复安装同名扩展。

[createBlockEditorPreset](/plugins/reference/create-block-editor-preset)

```ts
import { createBlockEditor } from '@quirekit/block-editor'
import '@quirekit/block-editor/styles.css'

const instance = createBlockEditor({
  element,
  preset: { characterCount: { limit: 5000 } },
  content: { type: 'doc', content: [{ type: 'paragraph' }] },
})
```

## 配置

下面是扩展自身的默认选项。预设可以覆盖这些值；它们不等于当前文档属性。配置方法见[配置插件](/plugins/configuration)。

### limit

最大允许字符数。null、undefined 或 0 表示不限制；已有超长内容可能被裁剪。

类型：`number | null | undefined`

默认：`null`

### mode

字符统计方式：textSize 计文本，nodeSize 计 ProseMirror 节点尺寸。

类型：`"nodeSize" | "textSize"`

默认：`"textSize"`

### textCounter

字符计数函数，接收提取出的纯文本并返回数量。需要按 Unicode 字符或字形计数时替换默认函数。

类型：`(text: string): number`

默认：`(text: string) => text.length`

### wordCounter

词数统计函数。默认按空格分词；中文等语言需要自己的分词方法。

类型：`(text: string): number`

默认：`(text: string) => text.split(" ").filter((word) => word !== "").length`

## 命令与运行方式

此入口没有直接声明可枚举的命令。组合扩展的命令由子扩展提供；产品插件通过 contribution 或文件服务工作。不能把安装入口名称当作命令调用。

limit 会参与事务过滤；打开已经超限的内容可能触发初始裁剪。需要无损读取外部文档时，先在宿主判断长度，再决定是否启用限制。

## 下一步

返回[全部插件](/plugins)，或阅读[配置插件](/plugins/configuration)区分配置、文档属性与命令。

自己定义能力时见[扩展开发](/build/extension)；搭建完整宿主时见[构建产品](/build)。
