首先感谢这些 博主:基础用法, 博主:缓冲管理, 博主:Org-mode, 博主:任务管理, 博主:Org-mode, 然后是Lisp中文
- 编写一段普通的文章, 然后保存下来, PS: 写这句话的时候, 我还不知道怎么保存和...退出T_T.
- C 就是Ctrl, M 就是META, 但是Mac上没有META, 所以实际上M是ESC. what the fuck?!!
- 记下以下几个快捷键
- C - p 光标上移
- C - n 光标下移
- C - f 光标右移
- C - b 光标左移
- C - l 如果文档超过一屏, 则让光标所在行成为屏幕中间的一行
- 是的, 以上移动, 一次一个字符
- 以下是更厉害的
- C - v 下一页
- M - v 上一页
- M - f 光标右移, 但是是右移一个词, 嗯..先这么理解: 如果是英语, 是一个单词; 如果是中文, 就直到一个标点符号或者空格;
- C - a 移动到行首
- C - e 移动到行尾
- M - a 移动到上一个句号后面
- M - e 移动到下一个句号前面, PS: 在markdown里面, 似乎并不好使.
- M - < 移动到文档头
- M - > 移动到文档后
- C - d 删除光标处的一个字符
- C - DEL / DEL 向左删除一个字符
- M - d 向右删除一个词
- M - DEL 向左删除一个词
- M - SPC 干掉光标附近的空格, 只留以下一个
- 以下是非常危险的操作
- C - k 向右删除至行尾
- M - k 向右删除到句号, 句尾
- 希望上面没有写个十几遍, 下面是补救措施(撤销)
- C - x u = C - _ = C - / 撤销上一步操作, PS. 这句应放在删除前面教!!不能我一个人被坑.
- 问题来了, 如何Redo ?
- 更高级别的移动光标操作
- C - u 设定参数给后面的命令, 比如 C - u 8 C - f 表示 光标右移8个字符, C - u 20 C - n
- 一个比较特殊的案例: C - u 3 C - v 并不是向下翻三页, 而是整个屏幕向上翻三行, 试试? 据说这样比较有意义.
- C - u [数字] 相当于 M - [数字], 这样就可以少按几个按键
- Yank
- 先解释以下, Yank是用来存储被删除的内容. 当超过一个字符被删除时, 将会被放入到Yank中. 试试?
- 了解一些Yank的高级知识: Yank Ring, Ring是一个环状解构, killed的数据被依次放入Ring中, M - y 表示要求换上一个被删除的内容, 试一下.
- M - y 只能跟在 C - y 后面. 我并不知道, 这个Ring到底有多大, 可以存多少被删除的数据.
- 似乎已经知道了如何cut then paste 内容了, 虽然这个方法简单粗暴, 但看(shi)上(ji)去(shang)有(fei)点(chang)笨, 那么有没有更好的办法?
- 答案是有! 不过超麻烦! PS. 实际上这并不能作为一个知识点.
- How to copy and paste?
- step 1: M - @ 设置标记
- step 2: 移动光标
- M - w 完成范围选择
- OK, let's try
- 最后一个基本命令: C - g 取消仍未完成的命令
- 读档: Emacs术语叫 finding a file
- C - x C - f 打开文档, 如果打开的文档不存在, 将被创建出来
- C - x C - s 保存当前文档
- C - x s 保存所有的文档
- C - x i 将目标文档插入当前文档
- M - x dired / C - x d 浏览文档列表
- 视窗: 将窗口划分为多个区域, 每个区域都是一个视窗
- 分割当前视窗
- C - x 0 关闭当前视窗
- C - x 1 关闭除当前视窗以外的任何视窗
- C - x 2 将当前视窗分割成上下部分
- C - x 3 将当前视窗分割成左右部分
- C - x 4 ? 有啥用?
- C - x 5 ? 没啥用?
- 多档编辑
- C - x C - b 打开Buffer List. 这个Buffer List是用来存放emacs打开的文档.
- C - x b 输入地址, 打开目标buffer
- C - x o 切换到另一个视窗
- 如果不知道如何关掉Buffer List, 可以试试 C - x o, C - x 0
- 更多的信息参见后面的缓冲管理部分
- 分割当前视窗
- 保存与退出
- C - x C - s 表示保存当前文档
- C - x s 表示保存所有打开的文档
- C - z 挂起当前emacs实例
- fg %emacs 可以唤醒最近一次挂起的emacs
- C - x C - c 表示关闭当前emacs实例
- emacs每过一段时间都会自动保存一次, auto saving...done.
- 切换模式 M - x
- 普通编辑模式 Fundamental (默认模式)
- 文本编辑模式 Text
- 还有很多其他模式,暂时不关心;
- 设置read-only, C - x C - q, 这是一个toggle命令. 意思就是再按一次, 就解除了read-only
- 搜索, 这简直是必须掌握的功能啊!!!啊!!!!
- C - s 向前(forward)做增量查找;
- C - r 向后(backward)做增量查找;
- 此时按C - g, 游标回到原来的位置, 按Enter(回车)则留在当前位置.
- 是时候试试了.
- 更复杂的查找
- M - x search-forward 向下查找
- M - x search-backward 向上查找
- 上面两种方式, 并不具备增量查找的能力, 也不具备让光标回到查询前位置的能力, 目前为止, 我依然认为这个功能很废柴! 讲道理, 难道不废柴?!
- M - x re-search-forward 用正则表达式来做向下查找, 先试试有没有 M - x re-search-backward, 果然有! 略机智T_T
- 替换
- M - x replace SPC... PS: SPC 相当于tab, 自动补全命令, 连按两下则有Panel出现.
- Emacs的配置文件
- 可以参考博文
- ~/.emacs 就是配置文件, 如果没有, 自行创建, 这相当于vim的.vimrc;
- to be continue... PS.现在就像编程? Too young to simple!
按键 | 效果 |
---|---|
C - x C - b | 打开Buffer Panel |
RET | 打开选中的Buffer |
C - u C - x C - b | 排除掉Emacs的缓冲,推荐一般情况下就使用这个查看缓冲. |
C - x k bufferName | 关闭指定的缓冲 |
kill-some-buffers | Emacs会逐个询问是否关闭,回答yes/no.'逐个'的意思是,包括emacs的缓冲. |
clean-buffer-list | 关掉三天都没用过的缓冲 |
C - x C - q | 切换是否只读 |
C - u M - g M - g num | 我不想记这个,好难受 |
rename-buffer | 重命名一个缓冲 |
rename-uniquely | 重命名当前缓冲,并在名字后加一个数字使其唯一 |
view-buffer | 只读模式打开一个缓冲,按q退出view模式 |
需要特别说的是, CRM列和Buffer列, 先说简单的Buffer列 Buffer记录了所有缓冲的名字,其中被name的缓冲是Emacs的,最好不要改它们. 接着说CRM.CRM展开的意思就是Current/ReadOnly/Modify,分别标识当前(.),只读(%)和已修改(*)
更多buffer-menu的操作
按键 | 效果 | 备注 |
---|---|---|
n | 下一项 | |
p | 上一项 | |
d或k | 标记删除 | 需要通过x执行 |
C - d | 标记删除 | 需要通过x执行 |
s | 标记保存 | 需要通过x执行 |
x | 执行删除或保存 | |
u | 取消标记,并移动到下一项 | |
backspace | 取消标记,并移动到上一项 | |
f或RET | 打开缓冲 | |
o | 打开缓冲,并选中视窗 | |
C - o | 打开缓冲,并不选中视窗 | |
m | 标记缓冲要在新视窗显示 | |
v | 显示标记的缓冲 | |
q | 退出Buffer Menu |
参考first.org
*表示标题,且*数量表示级别.数量越多级别越低.最多8级.
按键 | 效果 |
---|---|
C - c C - n | 下一个标题 |
C - c C - p | 上一个标题 |
C - c C - f | 下一个同级别标题 |
C - c C - b | 上一个同级别标题 |
C - c C - u | 回到上级标题 |
按键 | 效果 |
---|---|
M - RET | 插入同级别标题 |
M - S - RET | 插入一个同级别TODO项 |
TAB | 如果还没有文字,自动调整到合适的级别;如果有文字,则进行折叠/展开 |
M - Left/Right | 当前项提升/降低级别 |
M - Up/Down | 当前项与同级项交换位置 |
C - c C -c | 给标题添加标签 |
C - c C - w | 将当前项传送到另一个文件中 |
C - x n s/w | 将视域局限到当前项/放宽视域 |
按键 | 效果 |
---|---|
C - c / | 打开命令 |
C - c / r | 利用正则筛选目标并高亮显示 |
C - c C - c | 取消高亮 |
Org能识别有序列表,无序列表,描述列表
无序列表以 - + * 开头
有序列表以 1. 1) 开头
描述列表用 :: 将项和描述分开
任务列表以 [ ] 开头, 在任意位置插入[/][%]可以跟踪任务完成情况
按键 | 效果 |
---|---|
S + Left/Right | 切换列表类型 |
M + Left/Right | 提升/降低等级 |
M + Up/Down | 列表项调整顺序 |
C - c C - c | 选中或取消选中任务列表项 |
S + Up/Down | 上一项/下一项 |
C - c C - t | 将标题变成TODO |
更有意思的事情是,可以自己定义任务的状态,如下局部定义
#+SEQ_TODO: TODO(T!) DONE(D!/@)
全局定义则将以下代码添加到.emacs中
(setq org-todo-keywords
'((sequence "REPORT(r)" "BUG(b)" "KNOWNCAUSE(k)" "|" "FIXED(f)")
(sequence "TODO(T!)" "|" "DONE(D@)3" "CANCELED(C@/!)")
))
- 序列可以定义多个
- 状态之间用空格分隔
|
状态分组- 状态格式为
<状态名>([快捷键][@][/!])
()
中是附加项@
表示切换到该状态需要文字说明!
表示切换到该状态会自动添加时间戳- 注意,@和!同时使用需要用
/
分隔
按键 | 效果 |
---|---|
S + Up/Down | 改变TODO标题的优先级, 共三级A,B,C |
C - c , | 设置优先级 |
注意: 当改变子任务状态时,只更新上一级任务的完成情况,不可级联。 即使所有的子任务都完成,也只是标记上一级任务的完成情况为100%,而不能自动更新上级任务的完成状态。如果需要自动设定为完成,可以在.emacs中增加如下配置:
(defun org-summary-todo (n-done n-not-done)
"Switch entry to DONE when all subentries are done, to TODO otherwise."
(let (org-log-done org-log-states) ; turn off logging
(org-todo (if (= n-not-done 0) "DONE" "TODO"))))
(add-hook 'org-after-todo-statistics-hook 'org-summary-todo)
- 任务时间计划
按键 | 效果 | 备注 |
---|---|---|
C - c ! | 输入一个[时间] | |
S - Left/Right | 调整天 | 光标需停在时间戳范围内 |
S - Up/Down | 调整光标所在日期部分 | 比如:年,月,日,星期 |
C - c > | 查看日历 | |
C - c < | 输入yige <时间> | |
C - c C - y | 计算时间范围间隔天数 |
TIPS: 用 - 连接两个<时间>, 可以得到一个时间范围
- 计划时间 和 截止时间
按键 | 效果 | 备注 |
---|---|---|
C - c C - s | 给标题设置计划时间 | |
C - c C - d | 给标题设置截止时间 |
- 全局任务清单
添加如下代码到.emacs
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-cc" 'org-capture)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)
如果配置上述代码, 将会有以下按键效果
按键 | 效果 | 备注 |
---|---|---|
C - c a t | 进入全局TODO列表 | 全局TODO列表中列出所有全局文件中的未完成任务 |
C - c a a | 进入全局计划列表 | 还不知道是什么 |
C - c b | 按org文件名打开配置在org全局列表中的org文件 | |
C - c c | 不知道做什么的 | |
C - c l | 存储链接 | 执行org-store-link |
C - c C - l | 插入链接 | 执行org-insert-link |
C - c C - o | 打开链接 | 执行org-open-at-point |
C - c % | 记录内部链接地址 | |
C - c & | 跳转到已记录的内部地址 |
所谓内部链接, 就是如下这样的:
定义锚点 #<<my-anchor>>
[[my-anchor][内部链接]]
还有一种特殊的内部链接, 只是多了*fn:*的前缀:
定义脚注 [fn:my-anchor]
[[fn:my-anchor][脚注1]]
另外还有一些按键
按键 | 效果 |
---|---|
C - c [ | 在org文件中, 可以将任务标题添加到全局TOOO列表 |
C - c ] | 在org文件中, 可以将任务标题移出全局TODO列表 |
TIPS: 在全局TODO列表时, t 可以改变任务状态, RET 可到达任务所属源文件