Repository navigation
v1.4.1
1.4.1 — 改名不再把库改裂
这一版修的是 kb_rename:它会回「已重命名」,但库在磁盘与索引之间已经断开——新名字读不到、旧名字还能读出正文、kb_diag 却说一切正常。顺带修了三处小毛病。
改名之后索引会立刻跟上(最严重)
旧的缓存签名只统计 md 的数量、总字节、最大 mtime。改名既不改内容也不改 mtime,所以下一次调用依然命中旧索引:按新 TID 找不到、按旧 TID 反而能读出正文,kb_diag 也拿着改名前的节点表报 status: ok。
两个修法一起上:
- 缓存签名里加上相对路径集合的哈希(
sha1(排序后的路径)前 12 位)。改名、移动、增删文件都会立刻改签名,不看 mtime 的脸色。这比「改名后手动清缓存」可靠:用户mv、git checkout、编辑器重命名一样能被发现。 kb_rename成功后主动让该库的缓存失效,不必等下一次签名比对。
引用重写覆盖带引号的写法
rewriteRefsInText 以前只认 [[TID]] 与 [[TID:…]],而 README 教的写法是 [[node="TID"]]。于是它把这库的引用全判成「没有需要改写的」,改完就静默断链。
现在四种写法一次覆盖:[[TID]]、[[TID:…]]、[[node="TID"]]、[[tscl="TID"]];围栏内仍不重写。
kb_rename 接受相对路径
target 可以直接给 lessons/004-x.md(文档一直这么写,代码以前只认 TID)。解析顺序:精确 TID → 三级路径解析 → 库根 + 相对路径。
三处小毛病
kb_read target="."现在等于库根(README 写的是「空字符串或.」,代码以前只认空串)。- 读 tscl 定义时,「被引用 N 处」不再把定义所在节点算成引用者;引用行的行号也不再拼成
README.md#L45#L4这种两段。 kb_diag跟着上面两条一起正常:改名之后不再报已经不存在的悬空引用。
验证
- 离线自检 304 → 313 项(新增 9 条:带引号写法重写、前缀相同不动、相对路径改名、改名后下一次调用看到新 TID、
target="."、定义所在节点不算引用者、行号只拼一次)。 - 活体实跑(临时库,8 项全过):
tid="."200、相对路径改名、[[node="…"]]被重写、新 TID 立即可读、旧 TID 404、改名后 diag 无悬空、定义节点不自计。
已知不属于本插件的两件
- DSH 自带的
grep/ripgrep 默认跳过隐藏目录,.nodekb会被漏掉:全库检索请用kb_search,或把path指到具体文件。 - Windows 控制台(CP936)里显示中文路径会乱码:文件名建议 ASCII,中文写进
# 标题。