Obsidian 插件:Tag Wrangler 增强标签的管理体验
概述
该插件改善 Obsidian 标签管理的体验:
- 想要设置标签,就必须得先创建带有该标签的文档;
- 想要批量修改标签,只能通过写脚本来实现快速修改;
- 不支持拖拽插入标签。
插件名片
效果&特性
- 重命名标签(及其所有子标签)
- 开始新的标签搜索(类似于简单的点击)
- 将标签作为需求 (
tag:#whatever
) 添加到当前搜索 - 将标签 (
-tag:#whatever
) 的排除项添加到当前搜索中 - 打开带有该标签的随机笔记
- 折叠标签窗格中同一级别的所有标签
- 在标签窗格中展开同一级别的所有标签
使用方法
在标签面板中任意一个标签上点击右键,即可看到如下几个选项:
- 选项一:更改标签名称 可批量更改此标签及其嵌套标签的名称。
- 选项二:打开标签页面 点击就会自动创建一个带 YAML 语法的笔记,“别名”对应标签名。 具体用法稍后介绍。
- 选项三:基于标签搜索相关内容
- 选项四:搜索不带该标签的其他内容
直接拖拽标签,可将该标签快速插入到文中任意位置。
标签面板
可以 手动创建标签页面来快速输入各种标签。
在参考完官方文档后,我设计了一个标签文档,专门用来管理标签。
标签搜索
在 Tag wrangler 标签树下,在任意一个标签上右键,可在弹出的菜单中将该标签其加入搜索
- 开始对该标签进行新的搜索(类似于普通点击)
- 将标签添加为当前搜索的要求(
tag:#whatever
) - 将标签添加为当前搜索的排除项(
-tag:#whatever
)
- 将标签添加为当前搜索的要求(
在笔记中手动管理和创建标签
不必使用“创建标签页面”菜单命令来创建标签页面:只要页面具有标签作为有效的 Obsidian 别名,任何页面(甚至看板或 Excalidraw 绘图)都可以成为标签页面。您可以通过以下两种方式验证特定页面是否具有有效的别名:
- 打开 Obsidian 快速切换器(默认为 Ctrl/Cmd-O),然后输入
#
后跟标签名称:页面应该显示出标签作为别名 - 将笔记切换到预览模式,并查看元数据框顶部的“别名”是否包含标签的形状(前面带有箭头和
#
)
如果它在上述任何位置都没有显示出来,那么很可能您的笔记元数据在某种方式上存在语法错误。Obsidian 识别名为 Alias
或 Aliases
(不区分大小写)的第一个字段,并期望它是一个由逗号分隔的别名字符串或字符串的 YAML 列表。为了被识别为标签别名,字符串或字符串必须被引用。以下是一些包含标签的别名或别名字段的有效示例,每个示例都会导致该笔记被视为 #some/tag
的标签页面:
---
Alias: "#some/tag"
---
Aliases: [ "#some/tag", "another alias" ]
---
alias:
- some alias
- "#some/tag"
- another alias
---
aliases: "some alias, #some/tag, another alias"
---
请注意,每个项目都必须被引用并且位于有效的 YAML 列表([ ]
或带有 -
的行)中,或者整个别名集合应该被引用并用逗号分隔。标签别名也不能包含任何空格或其他文本。
当标签被重命名时,标签管理器将自动更新别名。您还可以手动编辑或删除别名以断开标签页面的连接,添加其他标签(以防您希望多个标签共享同一页),或更改页面所属的标签。
最后,请注意,您可以将相同的别名添加到多个笔记中,但在这种情况下,标签管理器将从可用选项中随机选择标签页面。要解决此问题,请使用快速切换器搜索具有该别名的笔记(即通过键入 #
和标签名称),然后从不想用作标签页面的笔记中删除别名(或别名)。
重命名标签
与重命名笔记类似,重命名标签涉及对所有引用它们的文件进行替换。为了确保只有实际的标签被重命名,Tag Wrangler 使用 Obsidian 自己的解析数据来识别标签的位置。这样,如果你有一个类似 [foo](#bar)
的 Markdown 链接,它不会将 #bar
视为 #bar
标签的一个实例。
因为标签只存在于包含它们的文件中,某些重命名操作是不可逆转的。例如,如果你将 #foo
重命名为 #bar
,而你已经有一个 #bar
标签,那么之后将无法确定哪些文件最初包含 #foo
,哪些包含 #bar
,除非查看备份或某种形式的修订控制。
因此,Tag Wrangler 会提前检查是否以一种将任何标签与现有标签合并的方式重命名标签,并要求额外的确认,警告缺乏撤销功能。(并不是说任何重命名都是可撤销的,只是如果没有发生合并,你通常可以将标签重新命名为旧名称!)
如果你正在使用某种类型的后台同步(例如 Dropbox、GDrive、Resilio 等),并且在 Tag Wrangler 进行重命名时导致任何文件发生更改,Tag Wrangler 可能会跳过已更改的文件,导致部分重命名。通常,重复相同的重命名选项应该可以完成进程,但在合并的情况下,你可能需要更加小心。(最好确保在开始任何重命名操作之前,确保所有同步操作已完成。)
如果需要更改的文件很多,或者重命名过程进行得很慢,将显示一个进度对话框,让你选择中止重命名过程。这不会撤销之前所做的更改,只会停止进一步的更改。
带有子标签的标签
Obsidian 允许使用 #x/y/z
形式的层次标签。当您重命名父标签(如 #x/y
)时,所有子标签也将被重命名。
例如,如果您将 #x/y
重命名为 #a/b
,那么之前命名为 #x/y/z
的标签将被重命名为 #a/b/z
。(除了逐个重命名所有子标签以将它们移动到另一个父标签下之外,没有办法仅重命名父标签。)
如果您想重构标签层次结构,请注意您可以将标签及其子标签重命名为具有更多或更少路径部分。也就是说,您可以将 #x/y
重命名为 #x
,然后您的 #x/y/z
标签将变为 #x/z
。或者相反,您可以将 #x/y
重命名为 #letters/x/y
,这将使 #x/y/z
移动到 #letters/x/y/z
。
有许多可能性可供重构标签。在开始之前,请务必备份,跟踪您所做的更改,并在同步或提交更改之前检查结果。
元数据/前置内容
Obsidian 允许通过 YAML 前置内容将标签指定为笔记的元数据的一部分。Tag Wrangler 将尝试重命名这些标签以及在笔记正文中找到的标签。
在大多数情况下,这不会引起任何问题。然而,如果您使用高级 YAML 功能来指定标签(YAML 别名或块标量),则有两点需要注意。
首先,如果您使用 YAML 块标量 (<
或 |
) 来指定标签,重命名标签可能会影响标签字段的缩进、间距或换行。其次,如果您在标签列表中使用 YAML 别名 (*
),重命名别名标签将会在原地展开别名,而不是更改定义别名的锚点。
缩进问题已经报告给上游库,希望将来能有某种解决方案。对于别名,当前行为是有意选择的,以避免更改元数据中的非标签值。因此,如果您使用这些更高级的 YAML 功能之一,您应该在进行全库重命名之前在一个临时笔记中尝试一些虚假标签。
大小写不敏感
Tag Wrangler 在匹配要更改的标签和检查冲突时使用与 Obsidian 相同的大小写不敏感比较。但请注意,由于 Obsidian 使用标签的第一个出现来确定在标签窗格中如何显示它,因此重命名标签时如果没有一致的大小写使用,可能会导致标签窗格中“其他”标签名称的表面更改。
假设您有一个名为 #foo/bar
的标签,并将 #foo
重命名为 #Bar/baz
。但与此同时,您已经有一个名为 #bar/bell
的标签。这可能会导致您现在在标签窗格中看到该标签显示为 #Bar/bell
,即使 Tag Wrangler 实际上没有替换任何现有的 #bar/bell
标签!(如果您搜索它们,您将看到这一点。)
相反,如果 #Bar/baz
标签是 Obsidian 在生成标签窗格时遇到的以 bar
某种变体开头的第一个标签,就会发生这种情况。Obsidian 只使用特定大小写的第一个遇到的字符串作为标签的“显示名称”,然后将所有后续出现视为相同的标签。
推荐阅读
- obsidian-tagfolder:通过笔记中的标签,重新组织所有的笔记
- obsidian-frontmatter-tag-suggest:很好解决记忆标签和快速输入的问题,提供标签自动建议的方法,让你可以键入简单字母来快速联想出来对应的标签
讨论
若阁下有独到的见解或新颖的想法,诚邀您在文章下方留言,与大家共同探讨。
反馈交流
其他渠道
版权声明
版权声明:所有 PKMer 文章如果需要转载,请附上原文出处链接。