Emacs 系列(一):拋掉一切,投入 Emacs 和 Org 模式的懷抱

2018-11-30 23:19:00

我必須承認,在使用了幾十年的 vim 後, 我被 Emacs 吸引了。

長期以來,我一直對如何組織安排事情感到沮喪。我也有用過 GTDZTD 之類的方法,但是像郵件或是大型檔案這樣的事務真的很難來組織安排。

我一直在用 Asana 處理任務,用 Evernote 做筆記,用 Thunderbird 處理郵件,把 ikiwiki 和其他的一些專案組合作為個人知識庫,而且還在電腦的歸檔了各種檔案。當我的新工作需要將 Slack 也加入進來時,我終於忍無可忍了。

許多 TODO 管理工具與電子郵件整合的很差。當你想做“提醒我在一週內回復這個郵件”之類的事時,很多時候是不可能的,因為這個工具不能以一種能夠輕鬆回復的方式儲存郵件。而這個問題在 Slack 上更為嚴重。

就在那時,我偶然發現了 Carsten Dominik 在 Google Talk 上關於 Org 模式的講話。Carsten 是 Org 模式的作者,即便是這個講話已經有 10 年了,但它仍然很具有參考價值。

我之前有用過 Org 模式,但是每次我都沒有真正的深入研究它, 因為我當時的反應是“一個大綱編輯器?但我需要的是待辦事項列表”。我就這麼錯過了它。但實際上 Org 模式就是我所需要的。

什麼是 Emacs?什麼是 Org 模式?

Emacs 最初是一個文字編輯器,現在依然是一個文字編輯器,而且這種傳統無疑貫穿始終。但是說 Emacs 是個編輯器是很不公平的。

Emacs 更像一個平台或是工具包。你不僅可以用它來編輯原始碼,而且設定 Emacs 本身也是程式設計,裡面有很多模式。就像編寫一個 Firefox 外掛一樣簡單,只要幾行程式碼,然後,模式裡的操作就改變了。

Org 模式也一樣。確實,它是一個大綱編輯器,但它真正所包含的不止如此。它是一個資訊組織平台。它的網站上寫著,“你可以用純文字來記錄你的生活:你可以用 Org 模式來記筆記,處理待辦事項,規劃專案和使用快速有效的純文字系統編寫文件。”

捕獲

如果你讀過基於 GTD 的生產力指南,那麼他們強調的一件事就是毫不費力地獲取專案。這個想法是,當某件事突然出現在你的腦海裡時,把它迅速輸入一個受信任的系統,這樣你就可以繼續做你正在做的事情。Org 模式有一個專門的捕獲系統。我可以在 Emacs 的任何地方按下 C-c c 鍵,它就會空出一個位置來記錄我的筆記。最關鍵的是,自動嵌入到筆記中的連結可以連結到我按下 C-c c 鍵時正在編輯的那一行。如果我正在編輯檔案,它會鏈回到那個檔案和我所在的行。如果我正在瀏覽郵件,它就會鏈回到那封郵件(通過郵件的 Message-Id,這樣它就可以在任何一個資料夾中找到郵件)。聊天時也一樣,甚至是當你在另一個 Org 模式中也可也這樣。

這樣我就可以做一個筆記,它會提醒我在一週內回復某封郵件,當我點選這個筆記中的連結時,它會在我的郵件閱讀器中彈出這封郵件 —— 即使我隨後將它從收件箱中存檔。

沒錯,這正是我要找的!

工具套件

一旦你開始使用 Org 模式,很快你就會想將所有的事情都整合到裡面。有可以從網路上捕獲內容的瀏覽器外掛,也有多個 Emacs 郵件或新聞閱讀器與之整合,ERC(IRC 用戶端)也不錯。所以我將自己從 Thunderbird 和 mairix + mutt (用於郵件歸檔)換到了 mu4e,從 xchat + slack 換到了 ERC。

你可能不明白,我喜歡這些基於 Emacs 的工具,而不是具有相同功能的單獨的工具。

一個小花絮:我又在使用離線 IMAP 了!我甚至在很久以前就用過 GNUS。

用一個 Emacs 進程來管理

我以前也經常使用 Emacs,那時,Emacs 是一個“大”的程式(現在顯示電源狀態的小程式佔用的記憶體要比 Emacs 多)。當時存在在啟動時間過長的問題,但是現在已經有連線到一個正在執行的 Emacs 進程的解決方法。

我喜歡用 Mod-p(一個 xmonaddzen 選單欄的快捷方式,但是在大多數傳統的桌面環境中該功能的快捷鍵是 Alt-F2)來啟動程式(LCTT 譯註:xmonad 是一種平鋪桌面;dzen 是 X11 視窗下管理訊息、提醒和選單的程式)。這個設定在不執行多個emacs 們emacsen時很方便,因為這樣就不會在試圖捕獲另一個開啟的檔案時出問題。這中方法很簡單:建立一個叫 em 的指令碼並將它放到我自己的環境變數中。就像這樣:

#!/bin/bash exec emacsclient -c -a "" "$@"

如果沒有 emacs 進程存在的話,就會建立一個新的 emacs 進程,否則的話就直接使用已存在的進程。這樣做還有一個好處:-nw 之類的引數工作的很好,它實際上就像在 shell 提示符下輸入 emacs 一樣。它很適合用於設定 EDITOR 環境變數。

下一篇

接下來我將討論我的使用情況,並展示以下的設定:

  • Org 模式,包括計算機之間的同步、捕獲、日程和待辦事項、檔案、連結、關鍵字和標記、各種匯出(幻燈片)等。
  • mu4e,用於電子郵件,包括多個賬戶,bbdb 整合
  • ERC,用於 IRC 和即時通訊