本文
主要介绍emacs org-model 的使用方法。
版本 | 说明 |
---|---|
0.1 | 初版发布 |
0.2 | 添加Org-Mode导出如何禁用下划线转下标 |
0.3 | 添加代码块的介绍 |
背景
- 主机: Thinkpad S2
- 系统: Deepin GNU/Linux 15.11
- 内核: Debian 6.3.0-18+deb9u1
- emacs版本:Linux GNU Emacs 26.3
参考
什么是org-mode?
org-mode 是文本编辑器Emacs中一种支持内容分级显示的编辑模式。这种模式支持写 To-Do 列表,日志管理,做笔记,做工程计划或者写网页。
安装
emacs 23以后默认自动安装 org-mode ,如果想安装最新版,可以手动下载安装包或通过emacs包管理器进行安装。手动下载和安装请参考org-mode下载页面。
大纲
org-mode强大的操作能力源于它对大纲的支持。
标题
文章中的标题可以通过 #+TITTLE: 来设置标题; 正文中的标题可以通过*,一个*表示一级,两个*表示二级标题。如:
|
|
注意: ‘*’要位于行首;‘*’后面要有一个空格。
大纲相关的快捷键
折叠
快捷键 | 说明 |
---|---|
S-TAB | 循环切换 整个文档 的大纲状态(三种状态:折叠,打开下一级,打开全部) |
TAB | 循环切换光标 所在大纲 的状态 (三种状态:折叠,打开下一级,打开全部) |
大纲间移动
快捷键 | 说明 |
---|---|
C-c C-n/p | 下/上一标题 |
C-c C-f/b | 下/上一标题(仅限同级标题) |
C-c C-u | 跳到上一级标题 |
C-c C-j | 切换到大纲浏览状态 |
基于大纲的编辑
快捷键 | 说明 |
---|---|
M-RET | 插入一个同级标题 |
M-S-RET | 插入一个同级TODO标题 |
M-LEFT/RIGHT | 将当前标题升/降级 |
M-S-LEFT/RIGHT | 将子树升/降级 |
M-S-UP/DOWN | 将子树上/下移 |
C-c * | 将本行设为标题/正文 |
C-c C-w | 将子树或区域移动到另一标题处(跨缓冲区) |
C-x n s/w | 只显示当前子树/返回 |
C-c C-x b | 在新缓冲区显示当前分支(类似C-x n s) |
C-c / | 只列出包含搜索结果的大纲,并高亮,支持多种搜索方式 |
C-c C-c | 取消高亮 |
关于大纲显示
org的大纲显示模式会对不同级标题采用不同颜色显示,但是默认的大纲显示没有缩进,如果想添加缩进显示,可以用M-x,输入org-indent-mode。如果想让某个文件默认用这种方式打开,可以在文件头部增加:
|
|
如果希望打开所有org文件都默认用这种方式,可以在.emacs或.emacs.d/init.el中添加如下配置:
|
|
轻量级标记语言
Org现在已经成为一种专门的轻量级标记语言,与Markdown、reStructedText、Textile、RDoc、MediaWiki等并列。
段落
可能我们习惯了回车下一行开启新的段落,而在org-mode中,需要回车两次,也就是段落间需要用空行隔开。
字体
*粗体*
/斜体/
+删除线+
_下划线_
下标: H_2 O
上标: E=mc^2
等宽字: =git= 或者 ~git~
(ox-hugo并未将org中上下标的语法转为markdown,暂时没有解决方案)
列表
列表语法
- 无序列表以’-'、‘+'或者’*‘开头
- 有序列表以’1.‘或者’1)‘开头
- 描述列表用’::’
- 列表层级用缩进体现
注意事项: 列表符号后面都要有空格;同级别的列表缩进要相同;空两行之后列表结束;
举例如下:
|
|
列表快捷键
快捷键 | 说明 |
---|---|
TAB | 折叠列表项 |
M-RET | 插入项 |
M-S-RET | 插入带复选框的项 |
M-S-UP/DOWN | 移动列表项 |
M-LEFT/RIGHT | 升/降级列表项,不包括子项 |
M-S-LEFT/RIGTH | 升/降级列表项,包括子项 |
C-c C-c | 改变复选框状态 |
C-c - | 更换列表标记(循环切换) |
表格
表格语法
任何以‘|’为首个非空字符的行都会被认为是表格的一部分。’|‘也是列分隔符。一个表格是下面的样子:
|
|
创建表格时,首先输入表头(如下),然后在第二行按Tab键,会自动补全表格框架。表格的标题声明可有可无,看个人需求。
|
|
有时候,表格的某一项特别的长,你可以在任意一个表格的空白项内输入数字来限制其所在列的长度,可以可以通过l、c、r来设置左中右对齐(默认左对齐)。比如(=>代表内容隐藏内容,实际为Abcedfgh):
|
|
列表快捷键
快捷键 | 说明 |
---|---|
C-c 竖线 | 创建或转换成表格 |
快捷键 | 说明 |
C-c C-c | 调整表格,不移动光标 |
TAB | 移动到下一区域,必要时新建一行 |
S-TAB | 移动到上一区域 |
RET | 移动到下一行,必要时新建一行 |
M-LEFT/RIGHT | 移动列 |
M-UP/DOWN | 移动行 |
M-S-LEFT/RIGHT | 删除/插入列 |
M-S-UP/DOWN | 删除/插入行 |
C-c - | 添加水平分割线 |
C-c RET | 添加水平分割线并跳到下一行 |
C-c ^ | 根据当前列排序,可以选择排序方式 |
缺陷
目前表格不支持拆分和合并,只能使用如下格式替代。
| 一级部门 | 二级部门 | 人数 |
|----------+----------+------|
| A | A.1 | 5 |
| | A.2 | 6 |
|----------+----------+------|
| B | B.1 | 7 |
| | B.2 | 3 |
分隔线
三条短线或以上显示为分隔线。‘—’
链接(图片与网址)
链接语法
链接用于链接一些资源地址,如图片、文件、URL等。如下(可省略链接描述):
|
|
直接显示的图片在Emacs里默认不显示,需按C-c C-x C-v才能显示,在输出成其他格式(html、pdf……)后也能看到。
设置图片大小和标题
|
|
链接快捷键
快捷键 | 说明 |
---|---|
C-c C-l | 插入链接和说明 |
C-c C-x C-v | 显示链接图片 |
标签
Tag的作用
对于信息的管理,有分类(category)和标签(tag)两种方式。这两种方式各有特点:通常分类是固定的,很少变化,而tag随时可以增加。分类通常表现为树状结构,比较清晰,但是树状结构过于简单,不能表达复杂的信息。所以,这两种方式通常结合起来使用。
标记Tag
在Org-mode中,可以对标题增加tag标记。标记的格式如下:
|
|
而且Org-mode的标签自动按照大纲树的结构继承。即子标题自动继承父标题的标签。比如:
|
|
则最后一行标题具有 work, boss, notes, action 四个标签。如果希望文档中的所有标题都具有某些标签,只需要定义文档元数据:
|
|
如果手工输入标签,在标题后设置标签,键入’:‘后,M-Tab自动提供标签的补齐。更方便的做法是在正文部分用C-c C-q 或直接在标题上用C-c C-c创建标签,这种方式可以列出所有预定义的标签以便选取。
预定义Tag
预定义的方式有两种:
- 在当前文件头部定义,这种方式预定义的标签只能在当前文件中使用,每项之间必须用空格分隔,可以在括号中定义一个快捷键;花括号里的为标签组,只能选择一个,对标签定义进行修改后,要在标签定义的位置按 C-c C-c 刷新才能生效:
|
|
- 在配置文件中定义 上面的标签定义只能在当前文件生效,如果要在所有的.org 文件中生效,需要在 Emacs 配置文件 .emacs 中进行定义:
|
|
Tag搜索
Tag搜索快捷键
快捷键 | 说明 |
---|---|
C-c \ | 按tag搜索标题 |
C-c / m | 搜索并按树状结构显示 |
C-c a m | 按标签搜索多个文件(需要将文件加入全局agenda) |
逻辑表达式限制条件
+ 和 a+b 同时有这两个标签
- 排除 a-b 有 a 但没有 b
| 或 a|b 有 a 或者有 b
& 和 a&b 同时有 a 和 b,可以用“+”替代
在查询视图中 C-c C-c 退出。
GTD(时间任务管理)
请参考org-mode,最强的任务管理利器,没有之一。我暂时并未使用org-mode进行时间任务管理,待使用后将总结进行补充。其实时间任务管理工具有很多,包括手机移动端,不一定非要使用emacs,不过emacs精神就是用emacs做一切。我用org-mode主要是做笔记和写博客,通过ox-hugo转为hugo识别的markdown文档,再通过hugo生成站点文件。
Org-Mode导出如何禁用下划线转下标
更多时候我们需要将org文件导出为pdf或html文件,这就会遇到一个问题,emacs org mode会将下划线转为下标格式,对导出的文件浏览很有影响。解决这个问题可参考如下两个方法:
- 在org文件添加OPTIONS:
|
|
- 在配置文件(.emacs/init.el)添加如下设置:
|
|
代码块
对于程序员来讲,写文章时免不了需要展示代码,org-mode的代码块的关键字是“#+BEGIN_SRC … #+END_SRC” ,在SRC后指明语言,可以支持缩进和语法高亮显示。示例如下(为了展示完整代码,对代码块关键字使用//进行了注释):
|
|
- 高亮显示:如果在org-mode编辑时代码不支持高亮显示,首先查看语言名称是否拼写错误(支持的常用语言类型罗列在了下面),如果确认无误,代码仍未高亮显示,请将代码“(setq org-src-fontify-natively t)”添加到.emacs或.init.el文件。
语言 | 标识符 |
---|---|
C | C |
C++ | C++ |
CSS | css |
Emacs Lisp | emacs-lisp |
Java | java |
Javascript | js |
LaTeX | latex |
Lisp | lisp |
MATLAB | matlab |
Org mode | org |
Perl | perl |
Python | python |
shell | sh |
SQL | sql |
- 缩进:在SRC代码块中,使用TAB键会按照语言格式自动缩进,如果未实现缩进,在非语言类型拼写错误下,请将代码“(setq org-src-tab-acts-natively t)”添加到.emacs或.init.el文件。(选中代码区域然后组合键C-M-\可以实现选择区域的自动缩进)
- 快速输入代码块:代码块的标签当然可以手动编辑,不过emacs提供了快捷键:先输入“<s”,然后按下TAB键,可自动创建代码块。其次还有以下快捷键,本人使用不多,读者可自行了解:
- <s + TAB 可以直接生成 #+BEGIN_SRC
- <e + TAB 可以直接生成 #+BEGIN_EXAMPLE
- <l + TAB 可以直接生成 #+BEGIN_EXPORT latex
- 如果是单行代码,可以直接使用”: xxxx"来表示,不过格式为text,这对展现一个命令示例非常有用。
- 另外光标在 SRC 区域的时候,C-c ' (单引号)可以弹出一个代码编辑区域。这里可以方便的编辑代码,编辑结束后kill此buffer即可。
脚注
在 org mode 中,你可以为你的文章添加注脚(footnote)。注脚的格式有两种,一是方括号+数字,二是方括号+fn+名字。
光标移动到插入脚注的位置,快捷键 C-c C-x f,接下来会自动跳转到文章末尾,填写脚注内容(注意:必须要顶格写):
|
|
输入法切换
emacs自带输入法,快捷键是Ctrl-\,这里倒不是要使用emacs的输入法,而是为了在不知道啥原因敲错,导致emacs为拼音输入时,可以自己切换回来。
文章原创,可能存在部分错误,欢迎指正,联系邮箱 cao_arvin@163.com。