6.3 Tag Hierarchy

标签可定义为层级结构。一个标签可作为一组其他标签的 /分组标签(group tag)/, 分组标签可视为其下属标签的“上位概念”。定义多个分组标签并嵌套,即可形成标签层级。

典型用途是构建术语(标签)分类体系,用于对文档或文档集中的节点进行分类。

搜索分组标签时,会返回该组及其子组内所有成员标签的匹配结果。在日程视图中, 按分组标签筛选会显示或隐藏带有该组任一成员或子组成员标签的标题。 这让标签搜索与筛选更加灵活。

可使用方括号设置分组标签,在分组标签与其关联标签间插入冒号—注意所有空格均为必需, 以确保 Org 能正确解析该行:

#+TAGS: [ GTD : Control Persp ]

本例中 ‘GTD’ 为分组标签,关联 ‘Control’ 、 ‘Persp’ 两个标签。 将 ‘Control’ 与 ‘Persp’ 继续设为分组标签,可形成完整标签层级:

#+TAGS: [ Control : Context Task ]
#+TAGS: [ Persp : Vision Goal AOF Project ]

从概念上可视为如下标签层级:

直接设置 org-tag-alist 时,可使用 :startgrouptag:grouptags:endgrouptag 关键字:

(setq org-tag-alist '((:startgrouptag)
                      ("GTD")
                      (:grouptags)
                      ("Control")
                      ("Persp")
                      (:endgrouptag)
                      (:startgrouptag)
                      ("Control")
                      (:grouptags)
                      ("Context")
                      ("Task")
                      (:endgrouptag)))

组内标签可设为互斥,用法与互斥标签分组相同—使用大括号包裹:

#+TAGS: { Context : @Home @Work @Call }

设置 org-tag-alist 时,可使用 :startgroup:endgroup 代替 :startgrouptag:endgrouptag , 使组内标签互斥。

此外,分组标签的成员也可使用正则表达式,从而实现更动态、基于规则的标签结构 (参见 Regular Expressions)。组内正则表达式必须放在大括号内。 扩展示例如下:

#+TAGS: [ Vision : {V@.+} ]
#+TAGS: [ Goal : {G@.+} ]
#+TAGS: [ AOF : {AOF@.+} ]
#+TAGS: [ Project : {P@.+} ]

搜索标签 ‘Project’ 时,会同时列出所有匹配正则表达式 ‘P@.+’ 的标签, 对 ‘Vision’ 、 ‘Goal’ 、 ‘AOF’ 的标签搜索同理。例如,该规则可很好支持带有通用项目标识的项目标签, 如 ‘P@2014_OrgTags!’ 。

若需临时忽略分组标签,可通过 org-toggle-tags-groups 切换分组标签支持, 该命令绑定至 C-c C-x q。若要完全禁用标签分组,可将 org-group-tags 设为 nil