首页
归档
友情链接
关于
Search
1
在wsl2中安装archlinux
158 阅读
2
nvim番外之将配置的插件管理器更新为lazy
107 阅读
3
2018总结与2019规划
76 阅读
4
从零开始配置 vim(15)——状态栏配置
74 阅读
5
PDF标准详解(五)——图形状态
51 阅读
软件与环境配置
博客搭建
从0开始配置vim
Vim 从嫌弃到依赖
linux
Emacs
MySQL
Git与Github
AndroidStudio
cmake
读书笔记
编程
PDF 标准
从0自制解释器
qt
C/C++语言
Windows 编程
Python
Java
算法与数据结构
PE结构
Thinking
FIRE
菜谱
登录
Search
标签搜索
c++
c
学习笔记
windows
文本操作术
编辑器
NeoVim
Vim
win32
VimScript
emacs
linux
elisp
读书笔记
文本编辑器
Java
反汇编
OLEDB
数据库编程
数据结构
Masimaro
累计撰写
337
篇文章
累计收到
32
条评论
首页
栏目
软件与环境配置
博客搭建
从0开始配置vim
Vim 从嫌弃到依赖
linux
Emacs
MySQL
Git与Github
AndroidStudio
cmake
读书笔记
编程
PDF 标准
从0自制解释器
qt
C/C++语言
Windows 编程
Python
Java
算法与数据结构
PE结构
Thinking
FIRE
菜谱
页面
归档
友情链接
关于
搜索到
1
篇与
的结果
2025-12-14
Emacs折腾日记(三十三)——org capture
在日常的工作生活中有各种各样的琐事,如果不及时记录下来很可能后面就忘了。或者在日常软件开发中有很多想法想要实现但是时间一长自己就忘了。这种情况下我们需要一个系统来记录收集想法并且后续需要追踪甚至回顾。我们需要一套适合的管理系统让大脑摆脱待办事项的纠缠,让大脑专注于当前要做的事物。目前我采取的方式是GTD+ 番茄工作法。GTD 简介GTD(Getting Things Done),是由戴维·艾伦于2002年提出的时间管理方法。其核心在于通过收集、整理、组织、回顾、执行五个步骤,将任务从大脑中移出,减轻心理压力以提升效率,强调两分钟内可完成事项立即处理的原则。用我的理解,我们需要事先准备几个速记的笔记本,一旦脑海中出现了想法就将它记录下来,这步叫做收集。在一天中的空闲时间例如下班前或者睡觉前打开看看之前记录的内容,将内容按照一定的规则重新组织例如分为工作、生活、学习之类的想法,将它们转化成可以执行的任务。并且为每个事项定一个紧急程度,这个就是整理、组织。在每天开始的时候或者结束的时候可以根据上面的分类安排一下当前或者明天的任务,这个是执行任务。在每周或者每天的时候回忆一下当前的任务看看哪些完成了、哪些未完成、从任务中有何感想,有哪些可以记录下来作为重要的日志或者日后博客的灵感来源,这个就是最后的回顾总结过程。番茄工作法再完美的系统,如果不执行或者不认真执行也是白搭的。对我来说GTD主要解决的是要做哪些事,如何安排时间的问题。至于如何高效的执行任务专注到任务上,我采用的番茄工作法。番茄工作法的简单理解就是将任务的时间拆分成几个不可分割的最小单元,在这个时间片单元内一心一意、专心到任务上。一旦分心就需要终止当前番茄钟,并记录分心的原因,如果是有新来的新任务就需要采用记录的方式记录,如果是紧急且重要的任务可能还要修改当前的任务计划。当然番茄工作法有一整套的收集、整理、执行、归纳总结的流程,但是对我来说我喜欢GTD的流程和番茄工作法的时间管理方式,所以我采用的是它们二者的结合。但是主要用在工作中,日常生活中的场景都是一些简单的琐事,例如收拾卫生、做饭、对我来说不合适这种形式。org capture目前来说市面上没有完全符合我心目中最佳时间管理理论的工具,但是Emacs中的org 是十分强大的,完全可以稍加改造成符合自己心意的时间管理系统。首先要解决的就是如何收集想法的问题。这个功能可以使用 org-capture,顾名思义它就是使用org的格式来快速记录当前的想法。我们使用 org-capture 命令可以看到下面的界面下方提示我们可以使用前面的字母符号来选择一个模板,默认只提供了一个名为 Task 的模板。我们可以使用 org-capture 中 来实现GTD中的分类记录的功能。在我们选定需要使用的模板之后,Emacs会调用 org-capture-select-template 函数来选中模板并且根据模板来创建默认的org 模板。默认的Task 模板如下:("t" "Task" entry (file+headline "" "Tasks") "* TODO %?\n %u\n %a")它们的含义如下t 标识选择模板时的快捷键。Task 模板的描述,让用户了解当前模板作用的说明文字。后面一个部分就是新增的内容新增的内容比较复杂,我们一个个的说。第一个部分是新增模板的type。type 可以是下面的内容type描述entry带有 headline 的一个 Org mode 节点item一个列表项checkitem一个 checkbox 列表项table-line一个表格行plain普通文本type 的不同,后面跟的内容也不一样。例如如果当前是 entry 的话,后面需要添加 "* headline" 作为标题行的形式,如果是 item 后面需要跟上 - item 作为一个项。如果是 checkitem 需要跟 [ ] item 作为一个checkbox项。如果使用 table-line,需要跟 | colum 1 | colum 2 | colum3 | 作为一个表格项目。如果是 plain 则没有特殊要求。接下来看看 (file+headline "" "Tasks") 中各个部分的含义,前面的 file+headline 表示将记录的内容保存到哪个位置。除了这两个标识还有其他的一些常用标识标识含义file文件id某个特定id的headlinefile+headline某个文件中的某个headlinefile+olp文件中某个headline的路径file+regexp文件以及被正则匹配的headlinefile+datetree文件中当日所在的datetreefile+datetree+prompt文件中的datetree 会弹出日期选择file+weektree文件中当日所属的 weektreefile+weektree+prompt文件中 weektree 会弹出日期选择file+function文件中被函数匹配的headlineclock当前正在计时中的任务所在位置function自定义函数的所定义的位置后面两个参数根据前面的内容来决定,例如如果使用 file+headline 的话,第二个参数就是文件路径,第三个参数就是具体的 headline 的名称。如果文件名参数为空的话,那么会使用 org-default-notes-file 所对应的文件路径为 ~/.notes 这些内容如果觉得有些比较难以理解的,可以查看 org-capture-tempetes 变量的详细说明"* TODO %?\n %u\n %a" 部分都是一些格式字符串和占位符,在选中模板之后会自动生成我们想要的模板文字。这里的占位符如果写过代码应该很容易理解,首先占位符都是 以%开头,后面根据不同的字符表示不同的含义时间相关的占位符占位符含义%<>表示自定义时间的时间戳,两个<>之间可以使用字符表示不同的时间格式,例如 %<%Y-%m-%d> 表示年月日的格式,年是4位字符的形式%t当前仅包含日期的时间戳%T当前包含日期时间的时间戳%u包含当前未激活的时间戳%U表示当前未激活的包含日期时间的时间戳%^t类似于 %t,但是会弹出日历供用户选择%^T类似于%T,但是会弹出日期和时间供用户选择%^u与上面的类似%^U与上面类似这里所谓的激活,在Emacs的文档中使用的词是 interactive 我不知道翻译为激活是否准确。未激活的时间戳日后不会出现在 org-agenda 中,至于什么是 org-agenda 请继续往下看剪切板相关的占位符占位符含义%c当前 kill ring 中的第一条内容%x当前系统剪贴板中的内容%^C交互式地选择 kill ring 或剪贴板中的内容%^L类似 %^C,但是将选中的内容作为链接插入后面还有更多更复杂的占位符,但是目前来说我用不到那么多,也就不一一列举了,各位读者如果感兴趣可以查看 org-capture-templetes 来查阅更多类型的占位符,至于 %?它什么也不往文件里面添加,它会在模板文本添加成功后将光标移动到它所在位置,方便用于自己输入内容除此以外,它还支持自定义函数的形式来插入内容,它的形式为 %(sexp) 括号中间就是lisp函数,假设我们有一个 custom-placeholder 那么这里就可以写成 %(custom-placeholder) 有了这些内容我们就可以定义自己的各种任务的模板个人日常任务模板对我个人来说,日常任务主要有:阅读清单、博客计划、工作任务。下面我希望通过这三大类任务来定制一些模板阅读清单首先是阅读清单,阅读清单主要记录一些我通过各种渠道了解到的并计划在后续需要读的书。根据我之前读的《如何有效阅读一本书:超实用笔记读书法》 的说法,记录要读的书,可以记录下面几个内容:书名作者出版社其他(可以是ISBN号)如果只根据书名可能会有书名重复的现象,所以根据这几条信息就可以唯一确认一本书因为Emacs提供的默认模板我不太喜欢,所以这里我先使用 (setq org-capture-templates nil) 来清空模板,后续由我自己实现各种模板(use-package org-capture :ensure nil :custom (org-capture-templates nil) (org-capture-templates '(("r" "Reading List" entry (file+olp "~/org/reading.org" "Reading" "Book") "*** TODO 《%^{书名}》\n作者:%^{作者}\n出版社:%^{出版社}:\n备注:%^{备注}\n添加时间:%U\n" :clock-int t :clock-resume t))))我们按照之前分析的模板中各个部分的组成来看看它是什么意思。首先第一个部分,我们定义通过快捷键 r 来选中并生成这个模板,Reading List 表示在模板展示时显示的内容。后面的entry 表示我需要添加一个带有 headline 的 org mode 节点,它后面跟着的子列表里面使用 file+olp 表示我需要在文件中的某个headline 下添加这条记录作为它的子内容部分。后面跟的就是文件路径、以及需要插入到当前文件下Reading 里面的 Book 下,作为子节点。最后定义的就是具体的内容了, 因为Reading 作为一级标题,它下面的 Book 作为二级标题,所以这里添加的阅读清单记录就是三级标题,所以我在它前面加了一个 *** 作为三级标题。前面的TODO是关键词,表示待做。后面就是输入的常规的内容了,包括出版社、作者等信息。它的运行效果如下:新建博客文章org-mode实际上是支持转换成markdown并通过hugo之类的静态网站生成程序来生成博客的。对于hugo 来说如果希望将markdown格式的内容转化成博客,我们需要在markdown文件头位置加入这些内容title: "Test" date: categories: blog tags: blog draft: true根据这些信息我们可以很容易的搭建基础的模板。针对这种场景,我希望它能在固定的位置生成一个以时间命名的 .md文档,这个位置一般位于hugo安装目录下的 posts 目录下。我们可以写下这样的配置 (add-to-list 'org-capture-templates `("b" "Blog" plain (file ,(concat "~/org/" (format-time-string "%Y-%m-%d.md"))) ,(concat "---\n" "tile: %^{标题}\n" "date: %U\n" "categories: %^{分类}\n" "tags: %^{标签}\n" "draft: %^{草稿|true|false}\n" "---\n" "%?")))它的效果如下:最终在我们保存之后它会在~/org 目录下生成一个以时间命名的markdown文件这种模式我个人不太喜欢,因为对我而言org-capture 仅仅只是一个收集的动作,我们应该快速记录想要写的博客以及博客的主要论点,而不应该开始编写具体的内容。至于如何使用org-mode来写博客,后面我想单独写一篇博客来介绍创建工作计划作为一个程序员来说,日常工作总会与程序打交道,比如开发新功能、写接口文档、修改bug、搭建开发测试环境、开会等等。有时候需要一个人负责多个多个项目。对于工作任务我们还需要分一个轻重缓急,我一般习惯于将它们分为:重要且紧急、重要但不紧急、紧急但不重要、不重要不紧急。那么对于工作任务的需求就很明确了。首先任务可以归属到不同的项目中,日后可以根据任务进行筛选任务可以细分为开发新功能、修复bug、搭建环境、写文档、开会等等任务可以划分轻重缓急日后通过todolist可以看到任务的轻重缓急,目前使用重要且紧急、重要但不紧急、不重要但紧急、不紧急不重要我们采用下面的代码 (add-to-list 'org-capture-templates `("w" "Work Task" entry (file+headline "~/org/working.org" "Work") "* TODO %^{任务描述} :%^{任务类型|dev|bugfix|env|doc|meeting}:\n SCHEDULED: %^t\n PRIORITY: %^{优先级|A|B|C|D}\n %?\n %i")))它的效果如下:到目前为止,介绍了关于org capture的相关内容,并演示了如何利用capture 实现一个任务的捕捉功能。gtd 后面的流程还有任务的分配、执行、记录等等功能,这些内容将在后面介绍。感谢各位读者的支持
2025年12月14日
2 阅读
0 评论
0 点赞