DSH 的内置 DiffBlock 在展示文件差异时,会将未变化的行在删除区(红色 -)和新增区(绿色 +)各渲染一遍,造成视觉冗余。当只修改一行时,这种重复会导致上下文混杂,难以一眼看清真实改动。
这个插件接管 DSH 浏览器的 edit / write 工具卡片,利用近线性行级 diff 算法,只渲染真实变化的行,并支持行内字符高亮,从而消除重复显示。
基本信息¶
- 名称:dsh-edit-diff
- 维护者:better-er
- 类别:工作流
- 许可证:MIT
- 定位:DSH·去重复 diff 展示插件
核心功能¶
插件提供差异行的过滤与高亮展示,核心能力如下:
- 仅差异行:完全相同的行不渲染,只显示真实变化的删除行(红
-)与新增行(绿+),消除重复。 - 行内字符高亮:当删/增行数相等时,对替换对进行字符级 diff,用下划线在行内标出真正改动的字符。
- 近线性算法:先对公共前缀/后缀进行线性收缩,仅对中间的小差异带运行 Myers diff,复杂度与差异量成正比,超大文件也流畅。
- 默认收起与二次折叠:卡片默认只显示一行摘要,点开才显示 diff 体。展开后若差异行超过 14 行,会折叠为“头 +⋯ 展开其余 N 行差异 + 尾”。
- 对齐原生观感:使用内置 DiffBlock/ToolRow 的
--dsw-*主题变量,保持视觉一致。 - 复制与统计:复制内容仅包含带
-/+前缀的差异行;底部显示变更统计└ +A -R · N file(s)。 - 接管范围:支持
edit/write双接管,覆盖新建场景。同时兼容 PTC 模式下的run_code子调用。 - 接管其他工具:通过
extraTools配置,接管其他工具(如dsh-remote-file-system的edit_remote/write_remote)。
安装与启用¶
在 DSH 环境中执行以下命令安装。两种安装方式均会自动挂载,重启 DSH web 后生效,无需手工编辑配置。
从 GitHub 安装(推荐,会自动构建):
dsh plugin --profile web add github:better-er/dsh-edit-diff
从 npm 安装(使用预构建产物):
dsh plugin --profile web add dsh-edit-diff
配置¶
插件通过 extraTools 配置接管除 edit / write 之外的其他工具。默认已接管 dsh-remote-file-system 的 edit_remote 和 write_remote。
默认接管配置¶
插件自带的 cordis.patch.yml 提供了默认接管配置:
- insert:
- id: dsh-edit-diff
name: dsh-edit-diff
config:
extraTools:
- name: edit_remote
- name: write_remote
自定义接管配置¶
若需接管参数名不同的工具,可在 profile 的 cordis.patch.yml 中按 id 覆盖配置。每条 extraTool 需指定 name,以及可选的 pathKey、oldKey、newKey、contentKey。
- id: dsh-edit-diff
config:
extraTools:
- name: some_tool
pathKey: target
oldKey: before
newKey: after
contentKey: body
判定规则¶
渲染逻辑由参数决定:同时包含旧文本与新文本则按 edit 型渲染,否则包含整文件内容则按 write 型渲染。
适用场景¶
- 需要清晰查看代码或文本修改内容的
edit/write工作流。 - 使用
run_code进行代码编辑并需要展示 diff 的 PTC 模式。 - 需要处理远程文件变更并展示差异的场景(已默认接管
dsh-remote-file-system)。
插件以标准形态挂载,通过 settings 命名空间向浏览器端传递配置,所有渲染在浏览器端完成。