把交叉的信息关联起来的最好的方式就是打标签。 emacs 的 org 模式对标签的支持非常强大。

每一个标题都可以在最后包含标签列表。标签由字母、数字、'_' 和 '@' 组成。标签的前后必需有一个冒号,比如 ':work:' 。也可以像 ':work:urgent:' 这样声明多个标签。标签默认情况下是加粗的,并且和标题拥有一样的颜色。可以通过 org-tag-face 为特定的标签指定不同的样式。

标签继承

标签使用和标题一样的继承结构。如果一个标题有标签,那么这个标题的所有子标题都拥有这个标签。如下面的列表所示:

 * Meeting with the French group :work:
** Summary by Frank :boss:notes:
*** TODO prepare slides for him :action:

虽然最后的标题没有声明任何标签,但通过继承,仍然拥有这些标签 ':work:', ':boss:', ':notes:', ':action:'。也可以用一个包围整个文件有最高级别的标签来为所有的标题设置一个公共的父标签。如下所示:

#+FILETAGS: :Peter:Boss:Secret:

此外,要限定 标签 不能继承自特定的标签时,可以通过  org-tags-exclude-from-inheritance 设置。要完全关闭标签继承的话,要用 org-use-tag-inheritance

如果打开标签继承,在进行标签搜索时,如果匹配到了一个标题,那么这个标题树下的所有标题都会匹配上。搜索出的列表可能会非常长。如果你仅仅想看匹配到的第一个标题的话,需要配置 org-tags-match-list-sublevels

不管是在 tags 还是 tags-todo 议程中,通过标签进行议程搜索时,标签继承都很有意义。在其它的议程类型中, org-use-tag-inheritance 不起作用。然而,你可能希望标签继承在议程中能够正确设置,这样能够通过标签进行过滤。设置 org-agenda-use-tag-inheritance 可以控制这一功能:默认值包括所有的议程类型,但是将这个变量设置为 nil 可以在很大程度上加快议程的生成速度。

设置标签

可以直接在标题的最后输入标签。在输入冒号后,M-TAG 提供了标签的自动补全和选择功能。也有一个特定的快捷键来插入标签:

C-c C-q                             org-set-tags-command
为当前的标题输入新的标签。Org 模式会提供自动完成或一个特定的单键界面来设置标签,具体看下面的说明。在输入 RET 后,会为当前标题插入标签并齐到 org-tags-column. 当输入一个 C-u 前缀时,当前缓冲区中的所有标签都会对齐到这一列,仅仅是看上去比对整齐,并且 TODO 的状态也会发生变更(参见[[TODO%20Basics][TODO 基础]])。
    
C-c C-c                             org-set-tags-command
当光标在标题上是,作用和 C-c C-q 相同
    
Org 支持根据标签列表来插入标签。默认情况下,这个列表动态创建,包含当前缓冲中的所有标签。你也可以通过变量 org-tag-alist 来创建一个全局的标签列表。最后你可以通过下面的形式为一个文件设置默认的标签:

#+TAGS: @work @home @tennisclus
#+TAGS: laptop car pc sailboat

如果你已经用 org-tag-alist 定义了喜欢的全局标签, 但又想在一个特定的文件中使用动态标签,那么可以通过添加一个空的 TAGS 选项到这个文件来达到这个目的:

#+TAGS

如果你想将预定义的全局标签添加到每一个文件的 TAGS 选项中,那么可以用 org-tag-persistent-alist 定义一个标签列表。这个选项可以在文件中通过 STARTUP 选项来关闭:

#+STARTUP: noptag

默认情况下,org 模式使用标准的 minibuffer  来输入标签 。然而,emacs 还提供了另外一种叫做 fast tag selection 的快速标签选择方式。在这种方式下可以仅用一个键来完成标签的选择和反选。要想使用这种方式,首先要为常使用的标签分配一个唯一字符。这个字符可以在 '.emacs' 中通过配置 org-tag-alist 来设置。比如,需要在很多文件中为很多项添加 ':home:' 标签。在这种情况下,可以这样设置:

(setq org-tag-alist '(("@work" . ?w) ("@home" . ? h ) ("@laptop" . ?l)))

如果标签仅仅和当前使用的文件相关,那么可以像下面这样在文件中添加 TAGS 选项:

#+TAGS: @work(w) @home(h) @tennisclub(t) laptop(l) pc(p)

标签接口会在一个 splash windows 中显示可用的标签。如果想在一个特定的标签后换行,需要在标签列表中插入一个 '\n' 。

#+TAGS: @work(w) @home(h) @tennisclub(t) \n laptop(l) pc(p)

或者将他们写成两行

#+TAGS: @work(w) @home(h) @tennisclub(t)
#+TAGS: laptop(l) pc(p)

也可以像下面这样用大(花)括号手动将标签进行分组

#+TAGS: { @work(w) @home(h) @tennisclub(t) } laptop(l) pc(p)

在这种情况下,@work(w) @home(h) @tennisclub(t) 三个标签最多同时选择一个

org 允许多个分组。

当光标在这些行上的时候,不要忘了按 C-c C-c 来激活其它修改。

如果要在 org-tags-alist 中设置排它的标签组,必需要用 :startgroup:endgroup 标签对,而不是用大括号。类似的,可以用 :newline 来声明一个新行。上面的例子也可以用下面的方式进行设置:

(setq org-tag-alist '((:startgroup . nil)
("@work" . ?w) ("@home" . ?h)
("@tennisclub" . ?t)
(:endgroup . nil)
("laptop" . ?l) ("pc" . ?p))

如果至少为一个标签定义了快捷键,按 C-c C-c 时会展示一个特殊的界面,其中列出了当前标题已经继承了的标签,还包含一个可选的标签列表。这个界面提供了下面的快捷键:

  • a-z...       按这些键时会将对应的标签添加到当前的标题列表中或从当前的标题列表中移除。选择一个具体排它性的标签组时,会将标签组的其它标签移除。
  • TAB        在迷你缓冲区中输入一个标签,即使这个标签不在预定义的标签列表中。对于缓冲区内的标签,提供了自动完成。当然也可以一次添加多个标签,只要把他们用冒号 ':' 分开。
  • SPC         清除这行的所有标签。
  • RET         确认修改
  • C-g         取消修改
  • q            如果 /q/ 不是某一个标签的快捷键的话,效果和 *C-g* 相同。
  • !            关闭组的排它性。这样就可以分配一个组的多个标签。
  • C-c        在下次修改后(参见下面的详细说明),切换 *auto-exit* 。如果是在专家模式下,第一个 *C-c* 会提供一个窗口。

在这种方式下,仅需要很少的几个键就可以为标题设置上标签。根据上面的设置,清除掉当前的标签并设置 '@home','laptop' 和 'pc' 等几个标签的话,仅需要下面的按键: C-c C-c SPC h l p RET 。从 '@home' 切换到 '@work' 仅需要 C-c C-c w RET 或者 C-c C-c C-c w 。要添加非预定义的标签 'Sarah' 话,按键顺序是 C-c C-c TAB S a r a h RET RET

如果你发现在大部分时候,仅仅需要一个键去修改标签列表,那么可以设置 org-fast-tag-select-single-key 参数。这样就不用按回车来退出快速标签选择了——它会在第一次修改立刻退出。如果在个别情况下需要多个按键,按 C-c 为当前的标签选择关闭 auto-exit (实际上是用 C-c C-c C-c 开始了选择而不是 C-c C-c )。如果将这个变量的值设置为 expert 那么除了多按一个 C-c 时,一般情况下在单键输入标签时选择窗口根本不会出现。

标签组

在一个排它的标签内,第一个标签可以定义为 组标签 。当你搜索一个组标签的时候,会返回匹配组内任意一个标签的所有项。在议程视图中,通过组标签进行过滤时,会展示至少包含一个组内一个标签的标题。这为标签搜索和过滤提供了很大的灵活性。

在标签组内,可以通过在组标签和其它标签间添加冒号来设置组标签——注意,所有的空格都不能省,这样 *Org* 才能正确的解析。比如:

#+TAGS: { @read : @read_book @read_ebook }

在这个例子中,@read 是标签集合 @read @read_book @read_ebook 的组标签。

也可以在设置 org-tag-alist 的时候直接通过 :grouptags 关键字设置组标签,比如:

(setq org-tag-alist '((:startgroup . nil)
("@read" . nil)
(:grouptags . nil)
("@read_book" . nil)
("@read_ebook" . nil)
(:endgroup . nil))

组标签不能嵌套也不能是其它标签组的标签。

如果想临时的忽略组标签,切换变量 org-toggle-tags-groups, 对应的快捷键 C-c C-x q 。如果想完全禁用标签组,设置 org-group-tags 为空。

标签搜索

一旦建立好了标签系统,就能够把标签相关的信息收集到一个特殊的列表中。

C-c / m 或 C-c \\                                 org-match-sparse-tree
创建一个包含搜索的标签的简要标题树。 有 C-u 前缀时,忽略不是 TODO 的标题栏。

C-c a m                                           org-tags-view
创建一个在所有议程文件中符合搜索的标签的标题列表。参见 [[Matching tags and properties]]

C-c a M                                           org-tags-view
创建一个在所有议程文件中符合搜索的标签的标题列表,但是仅仅检查 TODO 项并且强制检查子标题(见 org-tags-match-list-sublevels )。

这些命令都会提示一个搜索字符串,并且允许常见的逻辑操作,比如 '+boss+urgent-project1' 会查找包含 'boss' 和 'urgent' 但不包含 'project1' 的标题,又比如 'Kathy|Sally' 会查找包含 'Kathy' 或 'Sally' 的标题。搜索字符串支持非常多的格式,并且允许根据 TODO 关键字、标题级别和属性等进行过滤。[[Matching tags and properties]] 有很多的例子和说明。

emacs org mode 中的标签全参考的更多相关文章

  1. emacs: 文本输入中文件目录自动补全

    emacs: 文本输入中文件目录自动补全 // */ // ]]> UP | HOME   emacs: 文本输入中文件目录自动补全 Table of Contents 1 引言 2 补全过程演 ...

  2. python 全栈开发,Day45(html介绍和head标签,body标签中相关标签)

    一.html介绍 1.web标准 web准备介绍: w3c:万维网联盟组织,用来制定web标准的机构(组织) web标准:制作网页遵循的规范 web准备规范的分类:结构标准.表现标准.行为标准. 结构 ...

  3. python 全栈开发,Day45(html介绍和head标签,body标签中相关标签)

    一.html介绍 1.web标准 web准备介绍: w3c:万维网联盟组织,用来指定web标准的机构(组织) web标准:制作网页遵循的规范 web准备规范的分类:结构标准.表现标准.行为标准. 结构 ...

  4. HTML video 视频标签全属性详解

    HTML 5 video 视频标签全属性详解   现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera.Mozilla.C ...

  5. MVC中HtmlHelper用法大全参考

    MVC中HtmlHelper用法大全参考 解析MVC中HtmlHelper控件7个大类中各个控件的主要使用方法(1) 2012-02-27 16:25 HtmlHelper类在命令System.Web ...

  6. 【原创】Matlab中plot函数全功能解析

    [原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...

  7. Matlab中plot函数全功能解析

    Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName ...

  8. vue中的checkbox全选和反选

    前几天有个博客园的朋友问小颖,小颖之前写的vue2.0在table中实现全选和反选  .Vue.js实现checkbox的全选和反选,为什么他将里面的js复制下来,但是实现不了全选和反选.小颖当时看他 ...

  9. html中meta标签及用法理解

    自己一直想成为高级前端开发工程师,而自学.奈何最近感觉自学收效甚微,一度迷茫. 不破不立,打算改变这样的状态. 春节后上班第一天,今年打算好好实现自己的前端梦想. 重新整理.总结前端技术. 废话,就不 ...

随机推荐

  1. html body标签的几个属性 禁用鼠标右键,禁用鼠标选中文字等

    <body oncontextmenu='return false' ondragstart='return false' onselectstart ='return false' onsel ...

  2. JavaScript中对于闭包的理解

    1.什么是闭包? 闭包,官方对闭包的解释是:一个拥有很多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 闭包的特点: (1).作为一个函数变量的一个引用,当函 ...

  3. 黄聪:wordpress更新失败‘C:\Windows\TEMP/wordpress.tmp’,更换临时保存路径的解决办法

    1.如果可劲进入远程桌面,则给C:\WINDOWS\TEMP目录设置IIS访问权限. 2.虚拟机的方法:首先用FTP软件在网页空间wp-content目录中新建一个[tmp]目录,然后在wp-conf ...

  4. python简要

    python用冒号代替{}开启语句块 /usr/bin/python 加在脚本的头部, ./脚本 help("str") : 查看命令帮助 '''三引号可以打印换行字符串 prin ...

  5. webview和 内置浏览器的调用

    http://blog.csdn.net/hudashi/article/details/8176298/ 一.启动android默认浏览器 在Android程序中我们可以通过发送隐式Intent来启 ...

  6. MySQL优化技巧之四(数据库设计中的一些技巧)

    1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体.在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对 ...

  7. 里德九步审讯法 z

    在现实生活中,警方审讯靠的不仅仅是自信和创造力(尽管这两点对审讯工作确有帮助)——审讯者还要在交际影响的心理战术方面接受过高水平训练.       让一个人认罪可不是件容易事,而警察有时能让无辜者承认 ...

  8. 衔接UI线程和管理后台工作线程的类(多线程、异步调用)

    一个不错的UI多线程操作类 http://www.cnblogs.com/net66/archive/2005/08/03/206132.html

  9. jps命令

    转载:http://blog.csdn.net/wanglha/article/details/40181701 ps -- JavaVirtual Machine Process Status To ...

  10. Replace JSON.NET with ServiceStack.Text in ASP.NET Web API

    Because ServiceStack.Text performs much better I recently stumbled across a comparison of JSON seria ...