# RimeYamlEditor **Repository Path**: d1742647821/rime-yaml-editor ## Basic Information - **Project Name**: RimeYamlEditor - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-12 - **Last Updated**: 2026-08-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RimiYamlEditor — Rime 词库编辑器 一个用于编辑 Rime 输入法 `.dict.yaml` 词库的 Windows 桌面工具(C# / WPF / .NET 10 / Fluent 主题)。 ## 功能 - **解析词库**:严格对齐 librime 规则解析 `.dict.yaml`(`---` 头部到 `...` 结束,`name`/`version` 必填,`columns` 可自定义列序,`tab` 分隔条目 `字词\t编码[\t权重]`,权重支持负数与 `%`,`#` 注释与空行原样保留)。 - **选择文件**:打开任意目录(默认 `%APPDATA%\Rime`),递归列出 `*.dict.yaml`,勾选要加载的词库,选择会被记住。 - **查找**:按字词/编码、包含/前缀/完全匹配即时过滤。 - **加词**:填写字词、编码(已存在的字词会自动带出编码)、可选权重,选择目标文件;同文件重复词条拦截,同码异词提醒。 - **减词**:表格行删除、重码列表删除、简不出全批量删除。 - **重码**:列出“同一编码对应多个不同字词”的组,默认只显示纯汉字/词,可逐条删除。 - **简不出全(有简不出全)**:同一字词既有简码又有以简码开头(`StartsWith`)的长码时,长码为冗余,列出后可一键删除。 - **保存 / 同步**:编辑只改内存;`保存(工作副本)` 写入 `%APPDATA%\RimiYamlEditor\workspace\<目录名>\`,`同步到 Rime` 才写回真实词库文件(写入前自动生成 `.<时间戳>.bak` 备份)。未修改的文件可做到字节级往返一致。 - **图标**:`Assets/dyh.png` 作为 WPF 资源嵌入程序集(窗口/任务栏图标),`Assets/dyh.ico` 作为 exe 图标(`ApplicationIcon`)。 - **设置**:使用 Newtonsoft.Json(`Formatting.Indented`,带缩进换行)保存到 `%APPDATA%\RimiYamlEditor\settings.json`。 ## 项目结构 ``` RimiYamlEditor.sln ├─ src/RimiYamlEditor.Core # net10.0 类库:模型、解析/写入、重码/简不出全分析、设置 ├─ src/RimiYamlEditor.App # net10.0-windows WPF:Fluent 主题界面、MVVM └─ tests/RimiYamlEditor.Core.Tests# xUnit:解析/写入/分析/真实词库往返测试 ``` ## 构建(优先使用 Rider 自带 MSBuild) Rider 自带 MSBuild 的相对路径固定为 `\tools\MSBuild\Current\Bin\MSBuild.exe`。 查找顺序(不要写死盘符/版本): 1. Rider 正在运行时,从 `rider64.exe` 进程的 `ExecutablePath` 获取安装目录; 2. 读取 `%APPDATA%\JetBrains\Rider*\options\path.macros.xml` 中的 `BUNDLED_DOTNET_LOCATION`; 3. 检查 JetBrains Toolbox、`Program Files\JetBrains`、`Program Files (x86)\JetBrains`、`%LOCALAPPDATA%\Programs` 等常见安装根目录; 4. 找到多个版本时,优先选择版本号最高且文件存在的 Rider MSBuild。 本机示例:`D:\Program Files\JetBrains\JetBrains Rider 2026.2.0.1\tools\MSBuild\Current\Bin\MSBuild.exe`。 > 注意:本机 PATH 上的 `dotnet` 是 .NET 8 SDK,无法编译 net10 目标。编译前把 Rider 自带 dotnet 目录 > (`\lib\ReSharperHost\windows-x64\dotnet`,含 SDK 10.0.201)前置到 `PATH`(或设置 `DOTNET_ROOT`), > 让 MSBuild 的 SDK 解析器选到 .NET 10。 ```powershell $riderMsbuild = '\tools\MSBuild\Current\Bin\MSBuild.exe' $riderDotnetDir = '\lib\ReSharperHost\windows-x64\dotnet' $env:Path = "$riderDotnetDir;$env:Path" # 编译整个解决方案 & $riderMsbuild "RimiYamlEditor.sln" /t:Build /p:Configuration=Debug /m /p:RestoreIgnoreFailedSources=true # 运行(用 Rider 自带 dotnet,因为桌面运行时 10.0.5 在它里面) $env:DOTNET_ROOT = $riderDotnetDir & "$riderDotnetDir\dotnet.exe" run --project src\RimiYamlEditor.App # 运行测试 & "$riderDotnetDir\dotnet.exe" test tests\RimiYamlEditor.Core.Tests ``` 回退顺序:Rider 自带 MSBuild → Visual Studio/Build Tools 的 MSBuild → `dotnet build`,并在结果中说明实际使用的构建工具。 ## 测试 - 解析:头部字段、缺失 name/version、`columns` 覆盖列序、tab 切分、权重(`%`/负数)、注释/`# no comment`/空行、UTF-8/UTF-16 BOM、CRLF。 - 写入:未修改文件“读→写”字节一致;编辑仅重写该行;新增追加、删除移除。 - 分析:重码分组(同码异词)、简不出全(仅同一字词的长码 `StartsWith` 短码,排除跨字词前缀)。 - 真实词库:解析 `%APPDATA%\Rime` 下全部 `.dict.yaml` 并断言字节级往返一致(目录不存在时自动跳过)。 ## 说明与默认 - 目标框架 `net10.0-windows`(本机无 .NET 9 SDK;Fluent 主题行为与 net9 一致,通过 `Application ThemeMode="System"` 启用)。 - 加词默认目标:`flypy.user.dict.yaml`(可在加词对话框/设置中更改)。 - v1 不实现自动编码器(加词编码手动输入 + 已有词条自动带出);不新建词库文件;不自动重新部署 Rime(同步后手动重新部署);无撤销(靠 `.bak` 备份兜底)。 - 设置/工作副本位于 `%APPDATA%\RimiYamlEditor\`;运行期未处理异常会写入该目录的 `error.log`。