# 何为 Org-mode
Org-mode 是 Emacs 的一种 Mode,主要的应用场景有笔记管理、任务计划、项目管理等日常工作场景。我主要计划用它做笔记管理和任务计划,笔记管理后续可以结合 Org-roam 打造一个双链的个人知识库。
# 语法
这里简单记录一些较常用的语法及相关快捷键。这一部分参考了一些博客。[1]
# 标题
#+TITLE: emacs org-mode 的使用 | |
* 这是一个一级标题 | |
** 这是一个二级标题 | |
*** 以此类推(最多10个*) |
注意: * 要位于行首; * 后面要有一个空格。
每个标题可以看作一个大纲。
# 常用快捷键
# 大纲折叠
| 快捷键 | 功能 |
|---|---|
| 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 。如果想让某个文件默认用这种方式打开,可以在文件头部增加:
#+STARTUP: indent |
(setq org-startup-indented t) |
# 段落
在 org-mode 中需要两个回车来分隔一个段落,这点和 Markdown 一致。
# 字体
*粗体* | |
/斜体/ | |
+删除线+ | |
_下划线_ | |
下标: H_2 O | |
上标: E=mc^2 | |
高亮: =git= 或者 ~git~ (在我的终端里显示不同颜色) |
这里和 Markdown 有一些差距,有需要的时候查找即可。
# 列表
- 无序列表以
-、+或者*开头 - 有序列表以
1.或者1)开头 - 描述列表用
:: - 列表层级用缩进体现
列表符号后面都要有空格;同级别的列表缩进要相同;空两行之后列表结束;
示例:
+ treeroot | |
+ branch1 | |
+ branch2 | |
+ treeroot | |
1) branch1 | |
2) branch2 |
# 快捷键
| 快捷键 | 功能 |
|---|---|
| TAB | 折叠列表项 |
| M-RET | 插入项 |
| M-S-RET | 插入带复选框的项 |
| M-S-UP/DOWN | 移动列表项 |
| M-LEFT/RIGHT | 升 / 降级列表项,不包括子项 |
| M-S-LEFT/RIGTH | 升 / 降级列表项,包括子项 |
| C-c C-c | 改变复选框状态 |
| C-c - | 更换列表标记(循环切换) |
# 表格
一个普通表格:
#+CAPTION: 表格的标题 | |
| Name | Height | Weight | Age | | |
|----------+--------+--------+-----| | |
| Abcdefgh | 178 | 123 | 18 | |
注意表头和表格内容的分隔线和 Markdown 有略微不同。表头之上可以添加表格的标题(可选)。
对于内容较多的表格,可以设置每一列显示的长度以及对齐方式:
| <5> | <l5> | <r5> | <c5> | | |
| Name | Hei=> | Wei=> | Age | | |
|-------+-------+-------+-------| | |
| Ab=> | | | | |
可以在任意一个表格的空白项内输入数字来限制其所在列的长度,可以可以通过 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 ^ | 根据当前列排序,可以选择排序方式 |
目前表格不支持拆分和合并,只能使用如下格式替代。(本主题中安装的插件可以支持复杂格式的表格,具体参考插件 markdown-it-multimd-table ,或者我之前的博客 Shoka 主题测试)
| 一级部门 | 二级部门 | 人数 | | |
|----------+----------+------| | |
| A | A.1 | 5 | | |
| | A.2 | 6 | | |
|----------+----------+------| | |
| B | B.1 | 7 | | |
| | B.2 | 3 | |
# Org-roam 配置
在 .emacs.d/lisp/ 下创建 init-org-roam.el 文件,并写入以下内容:
(use-package org-roam | |
:ensure t | |
:init | |
(setq org-roam-v2-ack t) | |
:custom | |
(make-directory "~/org-roam") | |
(setq org-roam-db-gc-threshold most-positive-fixnum) | |
(setq org-roam-directory "~/org-roam/") | |
(setq org-roam-completion-everywhere t) | |
(setq org-roam-v2-ack t) | |
(add-hook 'after-init-hook 'org-roam-mode) | |
:bind (("C-c n l" . org-roam-buffer-toggle) | |
("C-c n f" . org-roam-node-find) | |
("C-c n i" . org-roam-node-insert) | |
:map org-mode-map | |
("C-M-i" . completion-at-point)) | |
:config | |
(org-roam-setup) | |
(use-package websocket | |
:ensure t) | |
(use-package simple-httpd | |
:ensure t) | |
(add-to-list 'load-path "~/.emacs.d/site-lisp/org-roam-ui") | |
(load-library "org-roam-ui") | |
(use-package org-roam-ui | |
:after org-roam | |
:config | |
(setq org-roam-ui-sync-theme t | |
org-roam-ui-follow t | |
org-roam-ui-follow-mode t | |
org-roam-ui-update-on-save t | |
org-roam-ui-open-on-start t)) | |
) | |
(use-package deft | |
:ensure t | |
:after org | |
:bind | |
("C-c n d" . deft) | |
:custom | |
(deft-recursive t) | |
(deft-use-filter-string-for-filename t) | |
(deft-default-extension "org") | |
(deft-directory org-roam-directory)) | |
(provide 'init-org-roam) |
在 init.el 中加入:
(require 'use-package) ;; just for org-roam installation | |
(require 'init-org-roam) |
注意这里需要安装 use-package ,如果报错,可以在 Emacs 界面中使用 M-x package-install RET use-package RET 进行安装。