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 命名空間向瀏覽器端傳遞配置,所有渲染在瀏覽器端完成。