1 本文參考
2 簡介
Org-Mode:Your Life in Plain Text.
Org-模式(Org-mode)是文本編輯軟件Emacs的一種支持內容分級顯示的編輯模式。這種模式支持寫 to-do 列表,日志管理,做筆記,做工程計划或者寫網頁。比如,todo 列表可以給每一件事分別賦上不同的優先級和最后完成期限,每一個 todo 項目又可以細分成次級 todo 列表或者核對表,而且每一個項目還都可以分別加標簽或者屬性。除此之外,org-模式還可以自動生成某一段時間以內的日程表。
我開使用主要的被所見所得,只專注與自己的思緒的神奇之處所吸引。至於高手們所說的種種其實都還沒有概念,我相信通過不斷深入的學習,我也會發出這樣的驚嘆:太TM的太神奇了。
3 安裝及簡單配置
Emacs23之后已經默認包含有org-mode模式了,但是網上都說新版的比較好,我於是就下了個目前最新的穩定版,解壓到site-lisp目錄下后,在.emacs中配置如下:
1: ;;;;;配置org-mode 2: (setq load-path (cons "E:/emacs-23.4/site-lisp/org-7.8.11/lisp" 3: load-path)) 4: (require 'org-install)
現在如果你新建一個.org格式的文件,如果在minibuffer中顯示Org的字樣,就意味着你已經成功了。
4 簡單操作
4.1 標題
文章中的標題可以通過 #+TITTLE: 來設置標題。如:
#+TITLE: 神器中的神器org-mode之入門篇
正文中的標題可以通過*,后面要有空格,然后再輸入想要的標題就可以了。一個*表示一級,兩個*表示二級標題。(最多10個*)。
4.2 段落
這里與我們想象的很不一樣,再win下只要你Enter,就換行成為新的一段了。但是這里要開始新的段落需要回車兩次,當你回車一次,當你發布時,只相當於中間有個空格而已。還有一種方法就是在需要空格的地方輸入\\。
段落一 段落二\\ 段落三
4.3 字體
*粗體* /斜體/ +刪除線+ _下划線_ 下標: H_2 O(這里必須留一個空格要不然2和O都成為小標,目前還不知道怎么去掉空格) 上標: E=mc^2 等寬字: =git=
效果為: 粗體
斜體 刪除線
下划線
下標:H2 O
上標:E=mc2
等寬字: git
4.4 列表
- 這里有有序和無序兩種,還有一種描述列表。
- 無序列表以'-'、'+'或者'*'開頭
- 有序列表以'1.'或者'1)'開頭
- 描述列表用'::'
- 注意事項
- 列表符號后面都要有空格
- 同級別的列表縮進要相同
- 如果想要加入同級別的列表,可以 M-RET
- 空兩行之后列表結束,如果空一行執行M-RET,實際上還是輸入同級項
4.4.1 示例:
**** Lord of the Rings My favorite scenes are (in this order) 1. The attack of the Rohirrim 2. Eowyn's fight with the witch king + this was already my favorite scene in the book + I really like Miranda Otto. 3. Peter Jackson being shot by Legolas - on DVD only He makes a really funny face when it happens. ORG-LIST-END-MARKER But in the end, no individual scenes matter but the film as a whole. Important actors in this film are: - Elijah Wood :: He plays Frodo - Sean Austin :: He plays Sam, Frodo's friend. I still remember him very well from his role as Mikey Walsh in The Goonies. ORG-LIST-END-MARKER
- Lord of the Rings
My favorite scenes are (in this order)- The attack of the Rohirrim
- Eowyn's fight with the witch king
- this was already my favorite scene in the book
- I really like Miranda Otto.
- Peter Jackson being shot by Legolas
- on DVD only
He makes a really funny face when it happens.
But in the end, no individual scenes matter but the film as a whole. Important actors in this film are:
- Elijah Wood
- He plays Frodo
- Sean Austin
- He plays Sam, Frodo's friend. I still remember him very well from his role as Mikey Walsh in The Goonies.
4.4.2 列表/標題快捷鍵
- 折疊
快捷鍵 | 說明 |
---|---|
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-c C-x b | 在新緩沖區顯示當前分支 |
C-c / | 只列出包含搜索結果的大綱,並高亮,支持多種搜索方式 |
4.5 嵌入元數據
4.5.1 內容元數據
org-mode中有以下幾種
s #+begin_src ... #+end_src e #+begin_example ... #+end_example : 單行的例子以冒號開頭 q #+begin_quote ... #+end_quote 通常用於引用,與默認格式相比左右都會留出縮進 v #+begin_verse ... #+end_verse 默認內容不換行,需要留出空行才能換行 c #+begin_center ... #+end_center l #+begin_latex ... #+end_latex L #+latex: h #+begin_html ... #+end_html H #+html: a #+begin_ascii ... #+end_ascii A #+ascii: i #+index: line I #+include: line
- 代碼
上面的單字母為快捷鍵字母,如輸入一個<s 然后TAB后就變為:#+begin_src #+end_src
怎么樣,這樣是不是就很方便了。
上面的代碼我們還可以加入一些參數,如#+begin_src c -n -t -h 7 -w 40 #+end_src 其中: c為所添加的語言 -n 顯示行號 -t 清除格式 -h 7 設置高度為7 -w 40設置寬度為40
- 注釋
以‘#‘開頭的行被看作注釋,不會被導出區塊注釋采用如下寫法:#+BEGIN_COMMENT 塊注釋 ... #+END_COMMENT
- 表格與圖片
對於表格和圖片,可以在前面增加標題和標簽的說明,以方便交叉引用。比如在表格的前面添加:#+CAPTION: This is the caption for the next table (or link)
則在需要的地方可以通過
\ref{table1}
來引用該表格。
- 嵌入html
對於導出html以及發布,嵌入html代碼就很有用。比如下面的例子適用於格式化為cnblogs的代碼塊:#+BEGIN_HTML <div class="cnblogs_Highlighter"> <pre class="brush:cpp"> int main() { return 0; } </pre> </div>
相當於在cnblogs的網頁編輯器中插入"c++"代碼。
- 包含文件
當導出文檔時,你可以包含其他文件中的內容。比如,想包含你的“.emacs”文件,你可以用:#+INCLUDE: "~/.emacs" src emacs-lisp
可選的第二個第三個參數是組織方式(例如,“quote”,“example”,或者“src”),如果是 “src”,語言用來格式化內容。組織方式是可選的,如果不給出,文本會被當作 Org 模式的正常處理。用 C-c ,可以訪問包含的文件。
4.5.2 文檔元數據
具體的內容可以到文檔中查看:Export options 我們除了手動添加上面的元數據外,還可以用快捷鍵 C-c C-e t 插入選項,其中可能有些選項我們需要經常用到:
H: | 標題層數 |
num: | 章節(標題)是否自動編號 |
toc: | 是否生成索引 |
creator: | 是否生成 "creat by emacs…" |
LINKUP: | UP: 鏈接 |
LINKHOME: | HEME: 鏈接 |
4.6 表格
org-mode里制作表格灰常灰常強大,其實我最初看了視頻才開始動心學org-mode的。
4.6.1 建立和操作表格
在 org mode 中,你可以畫表格。方法很簡單,在某一行頂格的位置輸入’|',然后輸入表格第一行第一列的內容,再輸入’|',然后輸入表格的的一行第二列的內容,以此類推。當第一行輸入完成后,按 TAB, org mode 會把當前行對齊,然后為你創造出表格的下一行,讓你繼續輸入。用 TAB 和 S+TAB可以在表格中正向或反向的移動。
- 比如下面的例子:
#+CAPTION: 表格的標題 | 1 | one | | 2 | two | | 3 | This is a long chunk of text | | 4 | four |
- 有時候,表格的某一項特別的長,你可以在任意一個表格的空白項內輸入數字來限制其所在列的長度。比如:
| | <6> | | 1 | one | | 2 | two | | 3 | This=> | | 4 | four |
在上面的例子中,第二列的長度不會超過6,超過的部分會被隱藏起來。你可以把鼠標移動到’This=>’上面,會有浮動標簽顯示出該項的內容,或者輸入’C-c `’可以編輯被隱藏的內容。如果你發現表格的某一項沒有如你預期的那樣被隱藏起來,你可以在表格中的任意位置按 ‘C-c C-c’。
- 我們還可以把表格弄的更好看一些。在表格的某兩行之間加入’|-’,然后按TAB,可以作出下面的效果:
| | <6> | |---+--------| | 1 | one | | 2 | two | | 3 | This=> | | 4 | four |
4.6.2 快捷鍵
- 整體區域
操作 | 說明 |
---|---|
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 ^ | 根據當前列排序,可以選擇排序方式 |
4.6.3 表格中的計算
例如一張價格表:
數量 | 單價 | 總額 |
---|---|---|
2 | 3.45 | |
4 | 4.34 | |
5 | 3.44 | |
5 | 5.6 |
| 數量 | 單價 | 總額 | |------+------+-------| | 2 | 3.45 | 6.9 | | 4 | 4.34 | 17.36 | | 5 | 3.44 | 17.2 | | 5 | 5.6 | 28. | #+TBLFM: $3=$1*$2
你可以輸入’C-u C-c C-c’強制org mode為整個表格進行計算。如果你不想讓某一列都按照公式計算,只希望在某一特定項上進行計算,你可以這樣輸入:':=$1*$2′, 即在等號前再加一個冒號。
4.7 連接
在一個鏈接上按C-c C-o即可訪問,至於調用什么程序訪問,取決於鏈接的內容,emacs和org mode的配置了。
4.7.1 自動連接
對於符合鏈接規則的內容,org-mode會自動將其視為鏈接,包括括文件、網頁、郵箱、新聞組、BBDB 數據庫項、 IRC 會話和記錄等。下面是一些例子:
http://www.astro.uva.nl/~dominik on the web file:/home/dominik/images/jupiter.jpg file, absolute path /home/dominik/images/jupiter.jpg same as above file:papers/last.pdf file, relative path file:projects.org another Org file docview:papers/last.pdf::NNN open file in doc-view mode at page NNN id:B7423F4D-2E8A-471B-8810-C40F074717E9 Link to heading by ID news:comp.emacs Usenet link mailto:adent@galaxy.net Mail link vm:folder VM folder link vm:folder#id VM message link wl:folder#id WANDERLUST message link mhe:folder#id MH-E message link rmail:folder#id RMAIL message link gnus:group#id Gnus article link bbdb:R.*Stallman BBDB link (with regexp) irc:/irc.com/#emacs/bob IRC link info:org:External%20links Info node link (with encoded space)
對於文件鏈接,可以用::后面增加定位符的方式鏈接到文件的特定位置。定位符可以是行號或搜索選項。如:
file:~/code/main.c::255 進入到 255 行 file:~/xx.org::My Target 找到目標‘<<My Target>>’ file:~/xx.org/::#my-custom-id 查找自定義 id 的項
4.7.2 手動連接
[[link][description]] [[link]]
4.7.3 內部連接
4.7.4 其他常用的連接命令
C-c l 可以在光標所在處創建一個跳轉目標點,在需要跳轉至該目標的位置輸入命令C-c C-l可以建立到目標的鏈接當輸入C-c C-l命令,光標若處在已經存在的一個鏈接上的時候,可以編輯改鏈接。命令C-c %可以記錄當前光標所在位置,當光標移到其他地方后,可以用C-c &跳轉回來。這里的位置記錄類似一個 kill-ring,重復輸入C-c %可以記錄多個位置,重復輸入C-c &可以連續跳轉到之前記錄的對應位置上。
4.8 注腳
在 org mode 中,你可以為你的文章添加注腳(footnote)。注腳的格式有兩種,一是方括號+數字,二是方括號+fn+名字。比如下面有兩個例子:在 org mode 的正文中寫下這兩句話:
The Org homepage1 now looks a lot better than it used to. The Org homepage2 now looks a lot better than it used to.
插入腳注:C-c C-x f 接下倆你可以寫一些其他東西,然后在文章的末尾寫上下面兩句話(注意:必須要頂格寫):
[1] The link is: http://orgmode.org [fn:orghome] The link is: http://orgmode.org
4.9 分割線
五條短線或以上顯示為分隔線。
-----
4.10 標簽tag
對於信息的管理,有分類(category)和標簽(tag)兩種方式。這兩種方式各有特點:
通常分類是固定的,很少變化,而tag隨時可以增加。 分類通常表現為樹狀結構,比較清晰,但是樹狀結構過於簡單,不能表達復雜的信息。比如,如果有多個分類樹,處理起來就會比較麻煩。
所以,這兩種方式通常結合起來使用。比如blog系統中,通常既支持文章的分類(樹),又支持為每篇文章作tag標記。
org-mode作為最好的文檔編輯利器 ,在支持文內大綱(也是樹狀結構)的同時,還方便的支持tag功能。tag可以在多篇文檔中共用。
簡單的說:分類就如同我博客分為c++、emacs、linux等一些列類別,但是我的每篇博文都會根據不同的內容設置 不同的標簽。
4.10.1 標記tags
如果希望文檔中的所有標題都具有某些標簽,只需要定義文檔元數據:
#+FILETAGS: :Peter:Boss:Secret:
更方便的做法是在正文部分用C-c C-q 或直接在標題上用C-c C-c創建標簽,這種方式可以
4.10.2 預定義tags
上面提到,除了可以輸入標簽外,還可以從預定義的標簽中進行選擇。如果手工輸入標簽,在標題后設置標簽,鍵入:后,M-Tab自動提供標簽的補齊。預定義的方式有兩種:
-1. 在當前文件頭部定義這種方式預定義的標簽只能在當前文件中使用。使用#+TAGS元數據進行標記,如:
#+TAGS: { 桌面(d) 服務器(s) } 編輯器(e) 瀏覽器(f) 多媒體(m) 壓縮(z)
每項之間必須用空格分隔,可以在括號中定義一個快捷鍵;花括號里的為標簽組,只能選擇一個
對標簽定義進行修改后,要在標簽定義的位置按 C-c C-c 刷新才能生效。
-2. 在配置文件中定義 上面的標簽定義只能在當前文件生效,如果要在所有的.org 文件中生效,需要在 Emacs 配置文件 .emacs 中進行定義:
(setq org-tag-alist '((:startgroup . nil) ("@work . ?w) ("@home" . ?h) ("@tennisclub" . ?t) (:endgroup . nil) ("laptop" . ?l) ("pc" . ?p)))
默認情況下,org會動態維護一個Tag列表,即當前輸入的標簽若不在列表中,則自動加入列表以供下次補齊使用。
為了使這幾種情況(默認列表、文件預設tags,全局預設tags)同時生效,需要在文件中增加一個空的TAGS定義:
#+TAGS:
4.10.3 tags查詢
設置標簽的主要目的還是為了查詢。org-mode 會為搜索結果建立一個視圖
快捷鍵 | 說明 |
---|---|
C-c \ | 可以用來查找某個tag下的所有項目 |
C-c / m | 搜索並按樹狀結構顯示 |
C-c a m | 從所有agenda file里建立符合某tag的全局性列表 |
+ 和 a+b 同時有這兩個標簽 - 排除 a-b 有 a 但沒有 b | 或 a|b 有 a 或者有 b & 和 a&b 同時有 a 和 b,可以用“+”替代
在查詢視圖中 C-c C-c 退出(我用怎么不管用呢?)
5 格式導出與發布
5.1 導出
org-mode可以導出很多種格式 ,其中最常用的就是文本、網頁和pdf格式的。
C-c C-e a 導出為文本文件。 C-c C-e h 導出為 HTML 文件
pdf有點麻煩需要什么latex,目前還不會。
5.2 發布
發布相關的命令:
命令 | 說明 |
C-c C-e C | 提示指明一個項目,將所有的文件發布 |
C-c C-e P | 發布包含當前文件的項目 |
C-c C-e F | 只發布當前文件 |
C-c C-e E | 發布所有項目 |
6 總結
終於寫完了,雖說org-mode高效,也把我累了個夠嗆。不會通過實際操作,學會了很多,對org-mode也算有了入門的了解。至於org-mode其余的功能,正在學習中,以后會把用法和使用心得奉上。不行了,要休息休息了。
7 附錄-快捷鍵總列表(7.8版)
Org-Mode Reference Card (for version 7.8.11)
Footnotes:
1 The link is: http://orgmode.org
2 The link is: http://orgmode.org