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]] 有很多的例子和说明。
emacs org mode 中的标签全参考的更多相关文章
- emacs: 文本输入中文件目录自动补全
emacs: 文本输入中文件目录自动补全 // */ // ]]> UP | HOME emacs: 文本输入中文件目录自动补全 Table of Contents 1 引言 2 补全过程演 ...
- python 全栈开发,Day45(html介绍和head标签,body标签中相关标签)
一.html介绍 1.web标准 web准备介绍: w3c:万维网联盟组织,用来制定web标准的机构(组织) web标准:制作网页遵循的规范 web准备规范的分类:结构标准.表现标准.行为标准. 结构 ...
- python 全栈开发,Day45(html介绍和head标签,body标签中相关标签)
一.html介绍 1.web标准 web准备介绍: w3c:万维网联盟组织,用来指定web标准的机构(组织) web标准:制作网页遵循的规范 web准备规范的分类:结构标准.表现标准.行为标准. 结构 ...
- HTML video 视频标签全属性详解
HTML 5 video 视频标签全属性详解 现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera.Mozilla.C ...
- MVC中HtmlHelper用法大全参考
MVC中HtmlHelper用法大全参考 解析MVC中HtmlHelper控件7个大类中各个控件的主要使用方法(1) 2012-02-27 16:25 HtmlHelper类在命令System.Web ...
- 【原创】Matlab中plot函数全功能解析
[原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...
- Matlab中plot函数全功能解析
Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName ...
- vue中的checkbox全选和反选
前几天有个博客园的朋友问小颖,小颖之前写的vue2.0在table中实现全选和反选 .Vue.js实现checkbox的全选和反选,为什么他将里面的js复制下来,但是实现不了全选和反选.小颖当时看他 ...
- html中meta标签及用法理解
自己一直想成为高级前端开发工程师,而自学.奈何最近感觉自学收效甚微,一度迷茫. 不破不立,打算改变这样的状态. 春节后上班第一天,今年打算好好实现自己的前端梦想. 重新整理.总结前端技术. 废话,就不 ...
随机推荐
- CenOS下搭建VPN服务
公司生产环境使用的是阿里云主机,采用的是两台nginx主机进行反向代理,现在需要内网一台服务器能够访问公网,所以在nginx服务器上搭建了VPN服务,用于进行内网访问公网. 系统环境:CenOS 6. ...
- Hadoop学习5--配置本地开发环境(Windows+Eclipse)
一.导入hadoop插件到eclipse 插件名称:hadoop-eclipse-plugin-2.7.0.jar 我是从网上下载的,还可以自己编译. 放到eclipse安装目录下的plugins文件 ...
- Blockchain概述--转
编者按:著名投资人 Fred Wilson 的同事 Joel Monegro 近日参加了纽约比特币 workshop HackBit聚会,其间他们讨论了比特币式的思维方式对未来十年世界的影响,而这种影 ...
- DBA_Oracle Sort排序处理空间耗用(概念)
2014-12-18 Created By BaoXinjian
- py继续
这个正则里面有引号,我外面在一个引号就出问题了,应该怎么处理 用双引号
- c# 贪吃蛇源码
using UnityEngine; using System.Collections;using System.Diagnostics;using UnityEngine.SceneManageme ...
- 配置jetty 远程调试
该调试不支持hessian 接口调用 1.配置远程jetty 服务器的 bin/jetty.sh JAVA_OPTIONS+=("-Xdebug -Xrunjdwp:server=y,tra ...
- java生成验证码图片
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, ...
- IOS应用发布NSLog的如何注释
#define IOS_DEBUG //发布时注释此行不输出log日志 #ifdef IOS_DEBUG #define NSLog(...) NSLog(__VA_ARGS__) #else #d ...
- yield self和instance_eval用法区别
class Foo def initialize(&block) instance_eval(&block) if block_given? end end class Foo def ...