emacs org mode 中的標簽全參考


把交叉的信息關聯起來的最好的方式就是打標簽。 emacs 的 org 模式對標簽的支持非常強大。

每一個標題都可以在最后包含標簽列表。標簽由字母、數字、'_' 和 '@' 組成。標簽的前后必需有一個冒號,比如 ':work:' 。也可以像 ':work:urgent:' 這樣聲明多個標簽。標簽默認情況下是加粗的,並且和標題擁有一樣的顏色。可以通過 org-tag-face 為特定的標簽指定不同的樣式。

標簽繼承

標簽使用和標題一樣的繼承結構。如果一個標題有標簽,那么這個標題的所有子標題都擁有這個標簽。如下面的列表所示:

 * Meeting with the French group :work:
 ** Summary by Frank             :boss:notes:
 *** TODO prepare slides for him :action:

雖然最后的標題沒有聲明任何標簽,但通過繼承,仍然擁有這些標簽 ':work:', ':boss:', ':notes:', ':action:'。也可以用一個包圍整個文件有最高級別的標簽來為所有的標題設置一個公共的父標簽。如下所示:

#+FILETAGS: :Peter:Boss:Secret:

此外,要限定 標簽 不能繼承自特定的標簽時,可以通過  org-tags-exclude-from-inheritance 設置。要完全關閉標簽繼承的話,要用 org-use-tag-inheritance

如果打開標簽繼承,在進行標簽搜索時,如果匹配到了一個標題,那么這個標題樹下的所有標題都會匹配上。搜索出的列表可能會非常長。如果你僅僅想看匹配到的第一個標題的話,需要配置 org-tags-match-list-sublevels

不管是在 tags 還是 tags-todo 議程中,通過標簽進行議程搜索時,標簽繼承都很有意義。在其它的議程類型中, org-use-tag-inheritance 不起作用。然而,你可能希望標簽繼承在議程中能夠正確設置,這樣能夠通過標簽進行過濾。設置 org-agenda-use-tag-inheritance 可以控制這一功能:默認值包括所有的議程類型,但是將這個變量設置為 nil 可以在很大程度上加快議程的生成速度。

設置標簽

可以直接在標題的最后輸入標簽。在輸入冒號后,M-TAG 提供了標簽的自動補全和選擇功能。也有一個特定的快捷鍵來插入標簽:

C-c C-q                             org-set-tags-command
為當前的標題輸入新的標簽。Org 模式會提供自動完成或一個特定的單鍵界面來設置標簽,具體看下面的說明。在輸入 RET 后,會為當前標題插入標簽並齊到 org-tags-column. 當輸入一個 C-u 前綴時,當前緩沖區中的所有標簽都會對齊到這一列,僅僅是看上去比對整齊,並且 TODO 的狀態也會發生變更(參見[[TODO%20Basics][TODO 基礎]])。
    
C-c C-c                             org-set-tags-command
當光標在標題上是,作用和 C-c C-q 相同
    
Org 支持根據標簽列表來插入標簽。默認情況下,這個列表動態創建,包含當前緩沖中的所有標簽。你也可以通過變量 org-tag-alist 來創建一個全局的標簽列表。最后你可以通過下面的形式為一個文件設置默認的標簽:

#+TAGS: @work @home @tennisclus
#+TAGS: laptop car pc sailboat

如果你已經用 org-tag-alist 定義了喜歡的全局標簽, 但又想在一個特定的文件中使用動態標簽,那么可以通過添加一個空的 TAGS 選項到這個文件來達到這個目的:

#+TAGS

如果你想將預定義的全局標簽添加到每一個文件的 TAGS 選項中,那么可以用 org-tag-persistent-alist 定義一個標簽列表。這個選項可以在文件中通過 STARTUP 選項來關閉:

#+STARTUP: noptag

默認情況下,org 模式使用標准的 minibuffer  來輸入標簽 。然而,emacs 還提供了另外一種叫做 fast tag selection 的快速標簽選擇方式。在這種方式下可以僅用一個鍵來完成標簽的選擇和反選。要想使用這種方式,首先要為常使用的標簽分配一個唯一字符。這個字符可以在 '.emacs' 中通過配置 org-tag-alist 來設置。比如,需要在很多文件中為很多項添加 ':home:' 標簽。在這種情況下,可以這樣設置:

(setq org-tag-alist '(("@work" . ?w) ("@home" . ? h ) ("@laptop" . ?l)))

如果標簽僅僅和當前使用的文件相關,那么可以像下面這樣在文件中添加 TAGS 選項:

#+TAGS: @work(w) @home(h) @tennisclub(t) laptop(l) pc(p)

標簽接口會在一個 splash windows 中顯示可用的標簽。如果想在一個特定的標簽后換行,需要在標簽列表中插入一個 '\n' 。

#+TAGS: @work(w) @home(h) @tennisclub(t) \n laptop(l) pc(p)

或者將他們寫成兩行

#+TAGS: @work(w) @home(h) @tennisclub(t)
#+TAGS: laptop(l) pc(p)

也可以像下面這樣用大(花)括號手動將標簽進行分組

#+TAGS: { @work(w) @home(h) @tennisclub(t) } laptop(l) pc(p)

在這種情況下,@work(w) @home(h) @tennisclub(t) 三個標簽最多同時選擇一個

org 允許多個分組。

當光標在這些行上的時候,不要忘了按 C-c C-c 來激活其它修改。

如果要在 org-tags-alist 中設置排它的標簽組,必需要用 :startgroup:endgroup 標簽對,而不是用大括號。類似的,可以用 :newline 來聲明一個新行。上面的例子也可以用下面的方式進行設置:

(setq org-tag-alist '((:startgroup . nil)
                      ("@work" . ?w) ("@home" . ?h)
                      ("@tennisclub" . ?t)
                      (:endgroup . nil)
                      ("laptop" . ?l) ("pc" . ?p))

如果至少為一個標簽定義了快捷鍵,按 C-c C-c 時會展示一個特殊的界面,其中列出了當前標題已經繼承了的標簽,還包含一個可選的標簽列表。這個界面提供了下面的快捷鍵:

  • a-z...       按這些鍵時會將對應的標簽添加到當前的標題列表中或從當前的標題列表中移除。選擇一個具體排它性的標簽組時,會將標簽組的其它標簽移除。
  • TAB        在迷你緩沖區中輸入一個標簽,即使這個標簽不在預定義的標簽列表中。對於緩沖區內的標簽,提供了自動完成。當然也可以一次添加多個標簽,只要把他們用冒號 ':' 分開。
  • SPC         清除這行的所有標簽。
  • RET         確認修改
  • C-g         取消修改
  • q            如果 /q/ 不是某一個標簽的快捷鍵的話,效果和 *C-g* 相同。
  • !            關閉組的排它性。這樣就可以分配一個組的多個標簽。
  • C-c        在下次修改后(參見下面的詳細說明),切換 *auto-exit* 。如果是在專家模式下,第一個 *C-c* 會提供一個窗口。

在這種方式下,僅需要很少的幾個鍵就可以為標題設置上標簽。根據上面的設置,清除掉當前的標簽並設置 '@home','laptop' 和 'pc' 等幾個標簽的話,僅需要下面的按鍵: C-c C-c SPC h l p RET 。從 '@home' 切換到 '@work' 僅需要 C-c C-c w RET 或者 C-c C-c C-c w 。要添加非預定義的標簽 'Sarah' 話,按鍵順序是 C-c C-c TAB S a r a h RET RET

如果你發現在大部分時候,僅僅需要一個鍵去修改標簽列表,那么可以設置 org-fast-tag-select-single-key 參數。這樣就不用按回車來退出快速標簽選擇了——它會在第一次修改立刻退出。如果在個別情況下需要多個按鍵,按 C-c 為當前的標簽選擇關閉 auto-exit (實際上是用 C-c C-c C-c 開始了選擇而不是 C-c C-c )。如果將這個變量的值設置為 expert 那么除了多按一個 C-c 時,一般情況下在單鍵輸入標簽時選擇窗口根本不會出現。

標簽組

在一個排它的標簽內,第一個標簽可以定義為 組標簽 。當你搜索一個組標簽的時候,會返回匹配組內任意一個標簽的所有項。在議程視圖中,通過組標簽進行過濾時,會展示至少包含一個組內一個標簽的標題。這為標簽搜索和過濾提供了很大的靈活性。

在標簽組內,可以通過在組標簽和其它標簽間添加冒號來設置組標簽——注意,所有的空格都不能省,這樣 *Org* 才能正確的解析。比如:

#+TAGS: { @read : @read_book @read_ebook }

在這個例子中,@read 是標簽集合 @read @read_book @read_ebook 的組標簽。

也可以在設置 org-tag-alist 的時候直接通過 :grouptags 關鍵字設置組標簽,比如:

(setq org-tag-alist '((:startgroup . nil)
                      ("@read" . nil)
                      (:grouptags . nil)
                      ("@read_book" . nil)
                      ("@read_ebook" . nil)
                      (:endgroup . nil))

組標簽不能嵌套也不能是其它標簽組的標簽。

如果想臨時的忽略組標簽,切換變量 org-toggle-tags-groups, 對應的快捷鍵 C-c C-x q 。如果想完全禁用標簽組,設置 org-group-tags 為空。

標簽搜索 

一旦建立好了標簽系統,就能夠把標簽相關的信息收集到一個特殊的列表中。

C-c / m 或 C-c \\                                 org-match-sparse-tree
創建一個包含搜索的標簽的簡要標題樹。 有 C-u 前綴時,忽略不是 TODO 的標題欄。

C-c a m                                           org-tags-view
創建一個在所有議程文件中符合搜索的標簽的標題列表。參見 [[Matching tags and properties]]

C-c a M                                           org-tags-view
創建一個在所有議程文件中符合搜索的標簽的標題列表,但是僅僅檢查 TODO 項並且強制檢查子標題(見 org-tags-match-list-sublevels )。

這些命令都會提示一個搜索字符串,並且允許常見的邏輯操作,比如 '+boss+urgent-project1' 會查找包含 'boss' 和 'urgent' 但不包含 'project1' 的標題,又比如 'Kathy|Sally' 會查找包含 'Kathy' 或 'Sally' 的標題。搜索字符串支持非常多的格式,並且允許根據 TODO 關鍵字、標題級別和屬性等進行過濾。[[Matching tags and properties]] 有很多的例子和說明。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM