Table of Contents
org-mode学习笔记
头信息注释
#+TAGS: { 桌面(d) 服务器(s) }  编辑器(e) 浏览器(f) 多媒体(m) 压缩(z)
#+TAGS:  { @Windows(w)  @Linux(l) }  
#+TAGS:  { 糟糕(1) 凑合(2) 不错(3) 很好(4) 极品(5) } 
#+SEQ_TODO: TODO(T) WAIT(W) | DONE(D!) CANCELED(C@) 
#+COLUMNS: %10ITEM  %10PRIORITY %15TODO %65TAGS
- 启动时概览
 - 设定标签,括弧中的为标签快捷键(如果没有指定,默认为首字母)。可以设置在多行中
 - 花括号为标签组,组中的标签只能选一个
 - 设定待办状态。将项设置为 | 后面的状态时(DONE CANCELED),会打上 CLOSED 标志
 - 设定列视图
 - 更新了参数后在参数区域按C-c C-c进行更新
 
这里的内容可以随时更改,但是要记得在改后用 C-c C-c 刷新设置
安装最新的org
http://orgmode.org/org-mode-download.html
下载最新的org版本,然后解压到home的emacs目录,在.emacs中添加load-path。
(require ‘org)
然后可以使用org-version查看版本号。
文档结构相关的操作
Motion
| 向前 | 向后 | |
|---|---|---|
| 同级 | C-c C-f | C-c C-b | 
| 跨级 | C-c C-n | C-c C-p | 
| 上一级 | C-c C-u | |
| 跳转 | C-c C-j | 
C-c C-j  org-goto 这个功能强大,随意跳转
S-TAB 收起所有目录树,相当与C-u TAB
headline结构移动
M-left,right 移动一级
M-S-left,righ subtree移动一级
M-S-up,down subtree上下移动一级
C-c C-x C-w kill subtree
Structure editing
M-RET         添加同级head
M-S-RET       插入TODO
M-LEFT,RIGHT,UP,DOWN 上下左右调级
Sparse Tree
C-/           搜索关键字,折叠其他所有,只显示关心内容
C-/ r
M-g M-n       在结果中跳转
M-g M-p
List
-,+,* 1. 1) :: 添加描述在list中同样支持类似header中的motion快捷键
注意一定后边要有个空格
Footnotes
C-c C-x f 自动在此处添加脚注,再按一次就可以回到刚才的地方
加粗
*name* /斜体/ _下划线_
链接
C-c C-l 添加一个链接
[[链接地址][链接名称]] [[链接地址]]如果想修改这个链接,在链接后按下 backspace。
在一个链接上按=C-c C-o=即可访问,至于调用什么程序访问,取决于链接的内容
内部链接 Internal Link
如下命令定义了一个名为target的跳转目标:
#<<target>>如下方式可以设置到target的链接:
[[target]] 或 [[target][description]]其他常用链接命令
C-c l 可以在光标所在处创建一个跳转目标点,在需要跳转至该目标的位置输入命令
C-c C-l 可以建立到目标的链接
当输入 C-c C-l 命令,光标若处在已经存在的一个链接上的时候,可以编辑改链接。   
添加附件
给文档添加附件非常简单 C-c C-a 然后就着菜单选好了,其中 C-c C-a a 是添加文件系统中的文件作为附件。
TABLES
在table中按TAB,跳到下一个table
在tab中按RET,跳到下一行
C-c C-c 整理格式
以 |- 开始的行TAB后扩充为分隔栏
C-c | 自动把一个空格排列的字段转化为表格
C-c RET 创建下一行表格
C-c - 在下一行插入一行分隔符
C-c ^ 按当前列排序
   
表格宽度
在一列中添加<n>
如果一行显示不完全会显示为==>
此时通过 C-c ` 进入编辑默认, C-c C-c 编辑完毕。
还可以添加左中右对齐。
l,c,r
比如:
<r10>
行列操作
M-上下左右
M-S-上下左右
表格计算
比较复杂,而且不常用,用得时候再说,还可以使用Org-Plot进行画图
tag
使用冒号扩起来,在headline后边。 :tag1:
快捷键: C-c C-q
如果光标在headline行,则可以直接使用 C-c C-c
search
C-c \ 或者 C-c / m
C-c a m 全局搜索
C-c \ 搜索标签
C-c / T
C-u C-c \     搜索带 TODO 的标签
可以使用逻辑表达式限制条件,更准确灵活的搜索
+ 和 a+b 同时有这两个标签 - 排除 a-b 有 a 但没有 b | 或 a|b 有 a 或者有 b & 和 a&b 同时有 a 和 b,可以用“+”替代在查询视图中
C-c C-c 退出     
code
语法:
#+NAME: <name> #+BEGIN_SRC <language> <switches> <header arguments> <body> #+END_SRC引用文字 #+BEGIN_EXAMPLE/#+END_EXAMPLE
为了保留引文的格式,还可以使用
#+BEGIN_VERSE/#+END_VERSE#+BEGIN_QUOTE/#+END_QUOTE将引文居中排版可以使用
#+BEGIN_CENTER/#+END_CENTER
例子:
(defun org-xor (a b) "Exclusive or." (if a (not b) b))输入<e和TAB,得到
#+end_example
输入<s和TAB,得到
#+begin_example
        #+begin_src
        #+end_src
咳,相应的还有:
("s" "#+begin_src ?\n\n#+end_src" "<src lang=\"?\">\n\n</src>")
("e" "#+begin_example\n?\n#+end_example" "<example>\n?\n</example>")
("q" "#+begin_quote\n?\n#+end_quote" "<quote>\n?\n</quote>")
("v" "#+begin_verse\n?\n#+end_verse" "<verse>\n?\n/verse>")
("c" "#+begin_center\n?\n#+end_center" "<center>\n?\n/center>")
("l" "#+begin_latex\n?\n#+end_latex" "<literal style=\"latex\">\n?\n</literal>")
("L" "#+latex: " "<literal style=\"latex\">?</literal>")
("h" "#+begin_html\n?\n#+end_html" "<literal style=\"html\">\n?\n</literal>")
("H" "#+html: " "<literal style=\"html\">?</literal>")
("a" "#+begin_ascii\n?\n#+end_ascii")
("A" "#+ascii: ")
("i" "#+include %file ?" "<include file=%file markup=\"?\">"))
这些都是定义在org-structure-template-alist中的变量。
定义快捷插入操作
(define-skeleton iexp "Input #+BEGIN_EXAMPLE #+END_EXAMPLE in org-mode" "" "#+BEGIN_EXAMPLE\n" _ "\n" "#+END_EXAMPLE" ) (define-abbrev org-mode-abbrev-table "iexp" "" 'iexp)如果你想插入代码片段,直接M-x iexp RET即可,
会自动出现#+BEGIN_EXAMPLE #+END_EXAMPLE,并且光标自动停留在中间等待你的输入,
如果文章中已经有了一段内容,直接选中这段内容,
M-x iexp RET ,同样可以将这段内容引用起来,非常方便.
貌似使用等号也是有这个作用,用在行内,比如 这样 
TODO使用
任何headline前加上TODO都可以变为TODO item
C-c C-t 循环变化TODO的状态
C-c / t 在sparse tree中查看TODO
C-c a t 显示aganda全局TODO
设置多个状态,并添加简写,可以使用 C-c C-t + brief 直接设置状态
(setq org-todo-keywords '((sequence "TODO(t)" "|" "DONE(d)") (sequence "REPORT(r)" "BUG(b)" "KNOWNCAUSE(k)" "|" "FIXED(f)") (sequence "|" "CANCELED(c)")))
C-u C-c C-t   手动输入 TODO 状态,如果设定快捷则使用快捷键输入S-right               循环切换 TODO 状态,两个以上 TODO 状态时使用S-leftC-S-right             组间切换C-S-leftC-c C-v               查询视图C-c / tC-c a t               全局 TODO 列表
TODO依赖关系
父级TODO只有等子TODO都done后才能done
例子: 添加ORDERED属性,subclass也是按照先后顺序执行
* Parent :PROPERTIES: :END: **TODO a **TODO b, needs to wait for (a) **TODO c, needs to wait for (a) and (b)
tracking todo state change
This is achieved by adding special markers ‘!’(for a timestamp) 
or ‘@’ (for a note with timestamp) in parentheses after each keyword.
exp:
(setq org-todo-keywords
’((sequence “TODO(t)” “WAIT(w@/!)” “|” “DONE(d!)” “CANCELED(c@)”)))
priotify
在headline添加priority cookie
*** TODO [#A] Write letter to Sam Fortune
A,B,C
不写priority cookie的headline默认为B
=C-c ,= 设置优先级
S-up,down 调高低
对于显示效果还要设置:
org-priority-faces
    
checkbox
每行以- [ ] 开头,就是checkbox,注意[ ]之间必须有空格
实际上是列表,所有要加- + 或者*在[ ]之前
但checkbox不加入global todo list。
试用于把一个任务分成若干个小项。
C-c C-c  toggle checkbox
C-u C-c C-c 在list符后添加一个空的checkbox或者删除
C-u C-u C-c C-c 把checkbox设置为中间状态[-]
还headline后添加[/]或者[%] 可以显示当前项完成的个数或者百分比。
   
org capture
用于快速记录一些想法,可以设置一些模板。
(setq org-directory "~/lwemacs/org") (setq org-default-notes-file (concat org-directory "/notes.org")) (global-set-key "\C-cc" 'org-capture)
C-c C-c 完成编辑C-c C-k 放弃编辑C-u C-c c 查看模板,或者定制模板C-u C-u C-c c 查看last note
添加模板,设置org-capture-templates变量:
(setq org-capture-templates '(("t" "Todo" entry (file+headline (concat org-directory "/gtd.org") "Tasks") "* TODO %?\n %i\n %a") ("j" "Journal" entry (file+datetree (concat org-directory "/journal.org")) "* %?\nEntered on %U\n %i\n %a")))要学习模板的格式,查看org-capture-templates变量描述。
  
exports
设置如下tag可以控制导出和不导出的headline
(:export:) and ‘(:noexport:) 
   
export option
放在文章的任何位置都可以
C-c C-e t 插入option模板
最好把统一的配置放在一个独立的文件中,然后进行引用
#+SETUPFILE
其中OPTIONS字段是最重要的,有很多选项:
C-c C-e 开始export命令,org-export,然后会提示导出什么格式。
注意,一定要加上\n:t, 导出的时候加入回行,否则都会显示为一行
防止下横杠被转义
关闭这个功能
也可以直接在配置文件中
(setq org-export-with-sub-superscripts nil)
或者只对某个site配置生效,在site的属性中添加
:sub-superscript nil
export html
org-export-html-postamble 默认此变量时true,会往结尾添加一些作者信息。
css相关:
org-export-html-style 或者 
view:   
info    Info-like interface with one section per page.
overview        Folding interface, initially showing only top-level.
content         Folding interface, starting with all headlines visible.
showall         Folding interface, all headlines and text visible.
遇到的问题:
使用了org-info.js,但是运行不成功,原因是只要页面出现加载错误,js就无法运行。
我的问题是sitemap.html写错了,无法加载,所以info.js没有效果,修改后正常了。
export pdf
apt install letex-recommend 结果还是导出失败。以后再搞吧。
有可能是版本的问题, 网上说要用最新的。我用的org才6.3版本。
解决了问题:需要安装一些包。
texlive-fonts-recommended, texlive-fonts-recommended, texlive-latex-extra
LaTeX Error: File `marvosym.sty’ not found. solution: apt-get install texlive-fonts-recommended
LaTeX Error: File `fullpage.sty’ not found. solution: apt-get install texlive-latex-extra
LaTeX Error: File `multibib.sty’ not found. solution: apt-get install texlive-bibtex-extra
LaTeX Error: File `algorithm.sty’ not found. solution: apt-get install texlive-science
中文问题:
安装texlive-xetex,这样就会有xelatex了。
暂时放弃,太费劲了,有空参考一下:
http://orgmode.org/worg/org-contrib/babel/examples/article-class.html
用 org-mode 写 LaTeX
http://www.cnblogs.com/visayafan/archive/2012/06/16/2552023.html
我这里生成不了org-article.cls?
这是从org-article中提取代码,org-babel-tangle总是执行失败。
使用org-jekyll导出
在一个headline上添加:blog:的tag和on的属性
然后执行:
org-jekyll-export-blog
dates and times
M-x org-time-
C-c . 创建时间, 还可以添加C-u前缀,可以插入当前时间,默认只是日期
C-c C-d 插入deadline
C-c C-s 插入Schedule
C-c ! 插入非激活的时间戳,并不激活到agenda
C-u C-c . 插入date+time
C-c C-o 访问agenda在这个时间点
S-up,down,left,right 调整当前j时间戳
M-x org-clock-
C-c C-x C-i clock in,一个工作的开始计时
C-c C-x C-o clock out
属性
在headline的下一行输入:
C-c C-x p 添加属性
在属性栏上
C-c C-c 弹出属性的action,可以添加删除
属性的搜索
c-c \ 搜索属性
未分类
C-c C-x b     在一个新缓冲区中显示当前分支
5个或以上的“-”是一个水平分割符。
byte-recompile-directory
编译整个目录el
C-u 0 M-x byte-recompile-directory
will compile all the .el files in the directory and in all subdirectories below.
The C-u 0 part is to make it not ask about every .el file that does not have a .elc counterpart.
emacs -batch -f batch-byte-compile <filename>
e.g.:   emacs -batch -f batch-byte-compile *.el
简单解释一下,-batch=–batch 不打开交互界面(emacs窗口),-f=–funcall 执行一个函数,后面跟的就是函数: batch-byte-compile 编译成字节码。
给大家补充一点编译知识:
lisp是函数式语言,它的程序不能编译成可执行程序独立执行,只能通过解释器解释执行。
所以emacs只能将.el文件字节编译,编译后的目标代码其实还是源程序,只是用字节码的方式存储,而且在字节编译的过程中进行了语法检查,所以可以提高执行效率。
问题
1.如果自动添加下一级head,如在lev1中回车后添加lev2,而M-RET添加的是同级的?
2.C-c | 转换的表格对不齐,不知如何对其?
主要是中文宽度的问题。
3.如果添加不让org解析的字段?
参考资料
http://emacser.com/org-mode.htm
org结合octopress
这个非常好:orgcard
http://orgmode.org/worg/orgcard.html
http://orgmode.org/orgcard.pdf
这是orgmode的专业社区,完全用orgmode组织
http://orgmode.org/worg/
可以试试自己搭建worg
http://orgmode.org/worg/worg-setup.html