Org-mode 学习笔记

这是一篇非常个人向的学习笔记,一切都是为了满足我自己的需求,所以会带有强烈的主观色彩。

第一目的只是满足个人需求,所以许多地方都按着最低学习成本的路线去走。

Org-mode 在我眼中是什么

大纲模式,或者说无限深度的列表。当然,如果只是如此,Workflowy 和幕布也可以完美满足。

但 org-mode 中的每一项可以包含的信息和内容种类则要大得多。甚至可以理解为每一项都是一个单独的笔记,能包含大量内容,拥有多种元数据。

如此的容纳能力产生了巨大的灵活性,我认为这是目前我见过的最强的大纲模式

Org-mode 解决了什么问题

我重要用在任务管理上,所以从这个角度思考,但实际上它可以被灵活运用到各种方面,比如说:写这篇文章,我先想要写哪些方面,然后再进行扩充,这就很符合大纲模式的思路,所以用 org-mode 进行书写会感到十分舒服。

在任务管理上,我可能同时进行多个项目,直白点,工作中的事情,生活中的事情,免不了每天都要完成一些,而不是某一天只工作或者只生活。而项目我喜欢三级分类:项目——功能——任务。这样每个任务都是在半个小时或者一个小时可以完成,比较不容易拖延,也容易获得成就感。

这时候有一个问题:任务脱离项目之后变得不容易理解,所以它必须处于项目树中(任务的组织)。但每个项目中都有一些要在今天完成的事情,这时候我想查看今天想做什么变得不容易起来(任务的筛选)。

这样的做出来的是个树状图(大纲),会有非常多的内容,不是简单的待办列表可以涵盖的。要求无限层级,快速切换项目,任意折叠展开等(便于观察

而且每个任务会有一些细节的条件,比如标签,比如日期,比如状态……也可能有一些临时的想法要标注在上面,这件事情我打算这样完成等等。(附加信息

如果能理解这些场景,那么应该可以感受到普通的大纲模式和待办列表都难以支撑起这些要求了。但是 org-mode 可以满足,甚至做的更好。

VS markdown

一种不可避免的比较,但这个比较并不恰当。

Markdown 是一种语法,标记语言。但是从这个角度上去讲就不容易理解区别了。换个说法,markdown 的目的是什么——在书写的时候不被格式设定打断,同时标记出重要的格式。所以目的在连续书写上。

Org-mode 看起来也是标记语言,但它只是以文本格式进行保存,而那些标记并不是让你手动输入的(虽然也确实可以手动输入),但显然我们一点都不希望每一次的时间和日期的设定或者修改都手动输入。甚至如果手动更改任务状态也能够很快让你感到崩溃。

Org-mode 在意你可以快速的去操作这一切,可以非常清晰准确的去组织大量的任务和状态。

所以把一个数据组织工具和一个文章格式语法放在一起比较,就很不恰当。

Emacs

在电脑端不得不去用的工具,因为没什么其他替代品。

单就一个只是想使用 org-mode 的外行而言,这东西的学习成本实在是高了点,常常让人不知道发生了什么。

但 org-mode 那么强大,大概是值得我们为此付出一些学习成本的。不过,不追求任何快捷操作,只是能用,还是比较简单的。

顺便说两个其他软件:

Logseq

当作 Wiki 去用还行,但 org-mode 就差强人意了。由此入门可以,但真正使用会挺别扭的。

Orgzly

Android 软件,算是完美支持 org-mode 了,而且都是正常的手机操作,支持各种方式同步,非常赞!

如果实在不想学习 Emacs,那就在电脑端用模拟器或者 WSA 用这个也不错。但是电脑端用这种触屏操作方式你会觉得效率很低。所以我个人只是把它当作移动端的查看编辑器。

起步

安装 Emacs,不说了,反正我用 scoop,一个命令的事情,我安装卸载折腾了好几轮了。

自带 org-mode,不用额外安装,别被那些过期文章给带坑里去。也别去弄那些看起来很漂亮,很强大的配置包(发行版),反正都不会用,引入太多变量可能很混乱。

如果想要关联文件,应该关联安装目录下 /bin/runemacs.exe,其他的 exe 比如:emacs.exe 不是不可以,但会由命令行启动,多一个命令行窗口,且不能关掉。

Emacs 应该算个命令行程序,不过我们用的都是它的客户端(GUI),也可以用如下命令在命令行中使用:emacs -nw

基本操作和设定

有菜单栏,有工具栏,用它们就可以完成基本操作了。别用快捷键,它们和你想的基本都不一样

个性化

选项里可以设置字体(Options——Set Default Font),设置完记得保存选项(Options——Save options),否则下次打开又是默认了。

可以自定义主题(Options——Customize Emacs——Custom Themes),选一个喜欢的,然后保存(记得保存),那些名称可以点击是让人没想到的。

这些配置都保存在:C:\Users\你的用户名\AppData\Roaming\.emacs 文件中,用的语言我不懂,但有必要的时候可以照猫画虎。

你可以设置隐藏工具栏(Options——Show/Hide),但不要隐藏菜单栏,因为不知道怎么再把菜单栏弄出来。不过这个问题也不太用担心,因为隐藏菜单栏以后,反正也不知道怎么保存选项(没法从菜单栏进入了),所以重启软件一切如初。

软件启动立刻最大化可能导致菜单栏无法显示,这跟配置没关系

日常快捷键

初期,没有日常快捷键会觉得十分不方便,可以勾选(Options——Use CUA keys(Cut/Paste with C-x/C-c/C-v)),就可以按照日常习惯剪切、复制、粘贴了,其实还包裹 Ctrl+z 撤销。

然后还可以再刚才说的配置文件中加入这些内容:

 (progn
  (global-set-key (kbd "C-f") 'isearch-forward)
  (global-set-key (kbd "C-s") 'save-buffer)
  (global-set-key (kbd "C-w") 'kill-buffer)
 )

不知道放在那里就放在最后(应该能行吧),日常的查找、保存、关闭快捷键。注意标点,双引号不能用单引号替代,后面的单引号不是成对的

后面会说怎么自己设置快捷键(虽然我照猫画虎失败了)。

初步了解,完成基本设置之后建议去掉这些自定义快捷键先。一方面保持最低更改。另一方面,就算这样自定义了,也不是说所有情况下这些按键都按照你预期的去进行工作,那样出了问题想找解决方法都难,不如先尝试一下按照它的逻辑去做,反正只是满足可用的话,也用不到很多按键。

关闭打开文件

Emacs 窗口内可以分屏,这时候开始让人觉得混乱,也没个标签页,无从操作。其实只需要用鼠标中键点击文件下面灰色的状态条就可以关闭这个文件。

因为用作日程管理,所以我每一次操作的都是同一个文件,那么打开这个文件(可以拖拽文件进来,但要拖拽到编辑区)。然后(Options——Customize Emacs——Specific Option…),这时候最底下会等待你的输入,输入:desktop-save-mode 回车,把模式切换为 on,然后保存,会弹出对话框让你选择保存的位置,默认就好了。这样下次打开软件就会默认打开上次的文件。

菜单 Buffers 可以在打开过的文件之间快速切换。

开始使用

一个 org 格式的文件,怎么建立的随意,反正我操作不顺手的时候就打开 VS Code。

文件头

要先写个文件头,就是这个文件的基本设置:

#+TITLE: 这个文件的标题,你随便写,也可以不写
#+STARTUP: indent
#+STARTUP: content
#+TODO: TODO(t) WILL(w) MAYBE(m) NEXT(n) DOING(i) | DONE(d) CANCELED(c)
#+TAGS: 预定义标签(y) 括号里是快捷键(k)

除了第二行是非常推荐的,其他都随你开心。

#+TODO 这一行中,竖线前面是未完成的状态(可以多种),竖线后面是已完成的状态(可以多种)
#+TAGS 这一行中,可以用大括号定义标签组,即这一组中只能选用一个标签。

写完以后没任何变化,保存文件,然后保持光标还在刚才修改的那一行,按 C-c C-c 即可看到效果。

快捷键

按键映射

先做说明:

  • C 代表 Ctrl
  • M 代表 Alt
  • S 代表 Shift
  • s 代表 Win
  • RET 代表 Enter

为什么我不一个批量替换把它们改成我们习惯的样子,可以对照上面自定义快捷键的配置方法,用这样的写法搭配后面的命令即可为需要的功能自定义快捷键。

层概念

如果用过一些自定义程度高的键盘,可能接触过层的概念,当你按住 Fn,键盘上的许多按键就表现为另外的功能了。

这里的层比那要复杂许多。我们日常一个快捷键(单个按键或者组合按键)对应一个功能。而在 Emacs 中,可能第一个快捷键切换层,第二个快捷键选中这一层里的某个功能。而层的深度甚至可以多达四层(我也不知道极限是多少,我就知道很多)。

  • C-c 代表 Ctrl+C
  • C-u C-u C-u TAB 代表按三下 Ctrl+U 再按一下 Tab

理解这些之后开始看常用快捷键。

常用快捷键

这里是极限精简后的列表,只是为了能完成日常操作而必须记住的几个快捷键。

快捷键 描述 命令
TAB 循环切换当前树的折叠/展开/显示全部 org-cycle
S-TAB 循环切换整个文件(所有树)的折叠/展开/显示全部 org-global-cycle
M-RET 在当前位置下插入一个新的同级标题(一般用这个就够) org-insert-heading
C-RET 在当前子树末尾插入一个新的标题 org-insert-heading-respect-content
M-left 将当前标题深入一个层级 org-do-promote
M-right 将当前标题提升一个层级 org-do-demote
C-c C-c 为当前标题选择标签 org-ctrl-c-ctrl-c
C-c C-q 为当前标题设定标签 org-set-tags
C-c C-t 切换当前标题状态 org-todo
S-up/S-down 调整优先级
C-c . 插入激活时间(尖括号) org-time-stamp
C-c ! 插入关闭时间(方括号)
C-c C-s 设定计划日期(SCHEDULED)
C-c C-d 设定结束日期(DEADLINE)
C-c C-x C-i 开始任务计时
C-c C-x C-o 结束任务计时

15 个快捷键,实际上记住大概十个就够,比如我几乎用不到时间相关的操作。

关于语法

一切操作只是为了便捷,如果没记住快捷键那就不便捷了,所以着急了直接手写虽然非常的粗暴,但是确实可以平推许多问题。

* 状态 [#优先级] 标题 :标签:

大概如此,各种东西都是可选。

然后

然后先用起来,这些基本操作熟练了再追求其他。

Agenda

我不懂,我就叫它“阿甘达”(玩笑

我也不太理解,所以描述的可能不准确。目前感觉就是类似行事历那种日历(a),或者一种快速筛选(t),筛选出所有待办事项。

我定义了一个快捷键:

 (global-set-key (kbd "C-c a") 'org-agenda)

好像大家都这么定义,似乎这个功能没有默认快捷键。

进入之后还得选择需用的具体功能,看着描述(英文)琢磨吧,反正退出记得用 q 键就对了(我摸索了好一会儿

这个也可以进行搜索啥的。

不过在使用之前要设定来源文件,就这么个意思吧,可以从菜单进入:(Org——File List for Agenda——Edit File List)。到这里你可能看到了更简便的方法,因为下面一项菜单就是:Add/Move Current File to Front of List。

归档

完成不用的任务不是删除,而是归档,以备以后查询。两种方式:

  • C-c C-x a :内部归档,就是加上归档标签
  • C-c C-x A : 内部归档,把任务存入一个归档子树
  • C-c C-x C-s : 外部归档,把任务存入一个外部的归档文件(同目录)

我用外部归档,这样文件可以小一点,反正大部分任务完成以后也不会再做查询。归档后的任务会携带原有的各种信息,比如所属的节点什么的,锁业也不用担心脱离当前结构后变得难以理解。

注释

#+BEGIN_COMMENT
TAB : 循环切换当前树的折叠/展开/显示全部
S-TAB : 循环切换整个文件(所有树)的折叠/展开/显示全部
M-RET : 在当前位置下插入一个新的同级标题(一般用这个就够)
C-RET : 在当前子树末尾插入一个新的标题
M-left : 将当前标题深入一个层级
M-right : 将当前标题提升一个层级
C-c C-c : 为当前标题选择标签
C-c C-q : 为当前标题设定标签
C-c C-t : 切换当前标题状态
S-up/S-down : 调整优先级
C-c . : 插入激活时间(尖括号)
C-c ! : 插入关闭时间(方括号)
C-c C-s : 设定计划日期(SCHEDULED)
C-c C-d : 设定结束日期(DEADLINE)
C-c C-x C-i : 开始任务计时
C-c C-x C-o : 结束任务计时
C-c C-x C-s : 外部归档
#+END_COMMENT

我就这样把常用按键以注释的形式放在前面了,反正我现在也记不住。

自动重载

当本地文件发生改变时,编辑器里的文件自动更新,这个在同步的时候比较有用,可以避免好些冲突。

到配置文件的自定义变量里添加:

 '(global-auto-revert-mode t)

保存以后如果懒得重启软件,可以:M-x,然后输入 eval-buffer 回车,就重新载入(运行)配置了。M-x 按键可以用来运行各种命令。

2 Likes

这种我一开始以为必须 C-u 松开 C-u ,后来发现按住 Ctrl 单击 3 次 u 就可以了 :sweat_smile:

因为本身代码狗,对这种理解起来倒是没难度(这轱辘早就把学习成本交出去了

层级无限,层级内容不限,层级附有元数据(可以视作隐性子层级吧)
把这特性排在一块后突然想起两个东西:
Checkvist
JSON

  • 快速修改
  • 任意折叠
  • 任意筛选
    ……

其实主要还是匹配的工具

+10086

Org-mode 属于我用不上的神器之一

我是能够项目做着做着就开始咕咕咕的家伙(状态打断,然后忘记到哪里了

所以很需要这种工具

记笔记之前,简单学个21天 Master Emacs in 21 Days (emacs-china.org)

Pls kill me.

我是计划学习一下 vim 的,结果先学起了 Emacs,总觉得有点……唔

推荐evil mode

最小变量吧,要不我就掉坑里了,现在争取在十组快捷键内解决问题(只要学的少,就不算我学过,嗯,evil

dired + evil mode 可以部分替代 totalcmd 了,像是论坛里那个批量替换文件名的需求,用emacs就很舒服了

问题是我想用的只有 Org-mode,再引入一个 evil-mode 我就更查不到该如何操作了 :joy:

不冲突的,可以同时启用,evil-mode == vim+emacs,统合了 vim 和 emacs 的优点

唔,想学,but,还没学……就,难度系数^2

恭喜,本论坛又多一个 emacs 用户

诶?!我怎么就位列敌营了呢

org-mode 真不是一般人能用的

倒也没那么极限,就先求能解决基本问题,学习成本不算高

看了看经受过痛苦的左手小拇指 :see_no_evil: