emacs org mode 中的标签全参考

把交叉的信息关联起来的最好的方式就是打标签。 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]] 有很多的例子和说明。

时间: 2024-10-15 22:07:43

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

Struts2中UI标签之表单标签的一个例子

1.最近写了一篇文章,介绍了一下Struts2中UI标签的表单标签,文章地址为:http://blog.csdn.net/u012561176/article/details/44986183  因为缺少了个例子,大家看文字和表格也看不出什么效果来,所以今天来介绍一个例子,用Struts2中UI标签的表单标签实现一个个人信息的表单,但是有些表单标签没有演示出来,大家可以根据我介绍UI标签的表单标签来进行学习,这里只是给个例子. 2.首先新建一个Struts2项目,项目名为PersonMess

gocode+auto-complete搭建emacs的go语言自动补全功能

上篇随笔记录了在emacs中使用go-mode和goflymake搭建了go语言的简单编程环境(推送门),今天来记录一下使用gocode+auto-complete配置emacs中go语言的自动补全功能.先看一下效果图??,我的emacs配置可以参考myemacs-conf. 关于gocode gocode是nsf写的各种编辑器提供go语言自动补全功能的工具.参考github中的README.md对gocode进行一下安装. $ go get -u github.com/nsf/gocode 安

HTML中<meta>标签的使用

HTML中<meta>标签的使用 <meta>标签基本介绍 <meta>标签是HTML网页源代码中一个重要的html标签.META便签用来描述一个HTML网页文档的属性,例如作者.日期.关键词.页面刷新.除此之外<meta>标签用于搜索引擎优化(SEO).它位于HTML文档中<head>元素内,虽然它提供的信息不可见,但它却是文档最基本的元信息. <meta>标签的属性列举 <meta>标签中属性可以分为必选属性和可选的属

Struts2中UI标签之表单标签介绍

1.在Struts2中UI标签的表单标签分为两种:form标签本身和单个表单标签. 2.Struts2表单标签包括:form.textfield.password.radio.checkbox.checkboxlist.select.doubleselect.combobox.optiontransferselect.optgroup.updownselect.textarea.hidden.file.label.submit.token.head.datepicker.reset.richte

Matlab中plot函数全功能解析

Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName',PropertyValue,...)plot(axes_handle,...)h = plot(...)hlines = plot('v6',...) 描述 plot(Y)如果Y是m×n的数组,以1:m为X横坐标,Y中的每一列元素为Y坐标,绘制n条曲线:如果Y是n×1或者1×n的向量,则以1:n

HTML中meta标签作用及属性总结

在前端开发中编写html静态网页模板时,head标签内总是会带上许多meta标签,大多数时候并不十分了解这些标签的具体作用,只是别人写了我们也写上吧! 今天小编特意查询了一下关于网页中meta标签的作用. meta是head区的一个辅助性标签.其主要作用有:搜索引擎优化(SEO),定义页面使用语言,自动刷新并指向新的页面,实现网页转换时的动态效果,控制页面缓冲,网页定级评价,控制网页显示的窗口等! meta标签共有两个属性,它们分别是http-equiv属性和name属性. 1.http-equ

图像全参考客观评价算法比较

Lin Zhang等人在论文<A COMPREHENSIVEEVALUATION OF FULL REFERENCE IMAGE QUALITY ASSESSMENT ALGORITHMS>中,比较了几种全参考图像质量评价算法,在此记录一下他们的结果. 下表所示是他们所用的图像库,包含了:TID2008database,CSIQ database,LIVEdatabase,IVCdatabase,Toyama-MICTdatabase,Cornell A57 database,以及 Wirel

SEO中HTML标签权重列表

网上流传很久的一份资料<SEO中HTML标签权重>,这里做一份备份.HTML标签权重分值排列内部链接文字:10分 标题title:10分 域名:7分 H1,H2字号标题:5分 每段首句:5分 路径或文件名:4分 相似度(关键词堆积):4分 每句开头:1.5分 加粗或斜体:1分 文本用法(内容):1分 title属性:1分 (注意不是<title>, 是title属性, 比如a href=- title=") alt标记:0.5分 Meta描述(Description属性)

HTML video 视频标签全属性详解

HTML 5 video 视频标签全属性详解 现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera.Mozilla.Chrome),支持H.264的(Safari.IE 9.Chrome),都不支持的(IE6.7.8).好吧,现在让我们从技术层面来认识HTML 5的视频,包括video标签的使用,视频对象可以用到的媒介属性和方法,以及媒介事件. Video标签的使用 Video标签含有src.poster.preloa