6 件你應該用 Emacs 做的事

2020-03-17 13:37:00

下面六件事情你可能都沒有意識到可以在 Emacs 下完成。此外還有我們的新備忘單,拿去,充分利用 Emacs 的功能吧。

想象一下使用 Python 的 IDLE 介面來編輯文字。你可以將檔案載入到記憶體中,編輯它們,並儲存更改。但是你執行的每個操作都由 Python 函數定義。例如,呼叫 upper() 來讓一個單詞全部大寫,呼叫 open 開啟檔案,等等。文字文件中的所有內容都是 Python 物件,可以進行相應的操作。從使用者的角度來看,這與其他文字編輯器的體驗一致。對於 Python 開發人員來說,這是一個豐富的 Python 環境,只需在組態檔中新增幾個自定義函數就可以對其進行更改和開發。

這就是 Emacs 對 1958 年的程式語言 Lisp 所做的事情。在 Emacs 中,執行應用程式的 Lisp 引擎與輸入文字之間無縫結合。對 Emacs 來說,一切都是 Lisp 資料,因此一切都可以通過程式設計進行分析和操作。

這造就了一個強大的使用者介面(UI)。但是,如果你是 Emacs 的普通使用者,你可能對它的能力知之甚少。下面是你可能沒有意識到 Emacs 可以做的六件事。

使用 Tramp 模式進行雲端編輯

Emacs 早在網路流行化之前就實現了透明的網路編輯能力了,而且時至今日,它仍然提供了最流暢的遠端編輯體驗。Emacs 中的 Tramp 模式(以前稱為 RPC 模式)代表著 “透明的遠端(檔案)存取,多協定Transparent Remote (file) Access,Multiple Protocol”,這準確說明了它提供的功能:通過最流行的網路協定輕鬆存取你希望編輯的遠端檔案。目前最流行、最安全的能用於遠端編輯的協定是 OpenSSH,因此 Tramp 使用它作為預設的協定。

在 Emacs 22.1 或更高版本中已經包含了 Tramp,因此要使用 Tramp,只需使用 Tramp 語法開啟一個檔案。在 Emacs 的 “File” 選單中,選擇 “Open File”。當在 Emacs 視窗底部的小緩衝區中出現提示時,使用以下語法輸入檔名:

/ssh:[email protected]:/path/to/file

如果需要互動式登入,Tramp 會提示你輸入密碼。但是,Tramp 直接使用 OpenSSH,所以為了避免互動提示,你可以將主機名、使用者名稱和 SSH 金鑰路徑新增到你的 ~/.ssh/config 檔案。與 Git 一樣,Emacs 首先使用你的 SSH 設定,只有在出現錯誤時才會停下來詢問更多資訊。

Tramp 非常適合編輯並沒有放在你的計算機上的檔案,它的使用者體驗與編輯本地檔案沒有明顯的區別。下次,當你 SSH 到伺服器啟動 Vim 或 Emacs 對談時,請嘗試使用 Tramp。

日曆

如果你喜歡文字多過圖形介面,那麼你一定會很高興地知道,可以使用 Emacs 以純文字的方式安排你的日程(或生活),而且你依然可以在移動裝置上使用開源的 Org 模式檢視器來獲得華麗的通知。

這個過程需要一些設定,以建立一個方便的方式來與移動裝置同步你的日程(我使用 Git,但你可以呼叫藍牙、KDE Connect、Nextcloud,或其他檔案同步工具),此外你必須在移動裝置上安裝一個 Org 模式檢視器(如 Orgzly)以及 Git 客戶程式。但是,一旦你搭建好了這些基礎,該流程就會與你常用的(或正在完善的,如果你是新使用者)Emacs 工作流完美地整合在一起。你可以在 Emacs 中方便地查閱日程、更新日程,並專注於任務上。議程上的變化將會反映在移動裝置上,因此即使在 Emacs 不可用的時候,你也可以保持井然有序。

感興趣了?閱讀我的關於的逐步指南。

存取終端

有可用。儘管 Emacs 中的 Elisp 終端模擬器不是最強大的通用模擬器,但是它有兩個顯著的優點:

  1. 開啟在 Emacs 緩衝區之中:我使用 Emacs 的 Elisp shell,因為它在 Emacs 視窗中開啟很方便,我經常全螢幕執行該視窗。這是一個小而重要的優勢,只需要輸入 Ctrl+x+o(或用 Emacs 符號來表示就是 C-x o)就能使用終端了,而且它還有一個特別好的地方在於當執行漫長的作業時能夠一瞥它的狀態報告。
  2. 在沒有系統剪貼簿的情況下複製和貼上特別方便:無論是因為懶惰不願將手從鍵盤移動到滑鼠,還是因為在遠端控制台執行 Emacs 而無法使用滑鼠,在 Emacs 中執行終端有時意味著可以從 Emacs 緩衝區中很快地傳輸資料到 Bash。

要嘗試 Emacs 終端,輸入 Alt+x(用 Emacs 符號表示就是 M-x),然後輸入 shell,然後按回車。

使用 Racket 模式

Racket 是一種激動人心的新興 Lisp 方言,擁有動態程式設計環境、GUI 工具包和充滿激情的社群。學習 Racket 的預設編輯器是 DrRacket,它的頂部是定義面板,底部是互動面板。使用該設定,使用者可以編寫影響 Racket 執行時環境的定義。就像舊的 Logo Turtle 程式,但是有一個終端而不是僅僅一個海龜。

Racket-mode

由 PLT 提供的 LGPL 範例程式碼

基於 Lisp 的 Emacs 為資深 Racket 程式設計人員提供了一個很好的整合式開發環境(IDE)。它尚未附帶 Racket 模式,但你可以使用 Emacs 包安裝程式安裝 Racket 模式和輔助擴充套件。要安裝它,按下 Alt+X(用 Emacs 符號表示就是 M-x),鍵入 package-install,然後按回車。接著輸入要安裝的包 racet-mode,按回車。

使用 M-x racket-mode 進入 Racket 模式。如果你是 Racket 新手,而對 Lisp 或 Emacs 比較熟悉,可以從這份優秀的圖解 Racket 入手。

指令碼

你可能知道,Bash 指令碼在自動化和增強 Linux 或 Unix 體驗方面很流行。你可能聽說過 Python 在這方面也做得很好。但是你知道 Lisp 指令碼可以用同樣的方式執行嗎?有時人們會對 Lisp 到底有多有用感到困惑,因為許多人是通過 Emacs 來了解 Lisp 的,因此有一種潛在的印象,即在 21 世紀執行 Lisp 的惟一方法是在 Emacs 中執行。幸運的是,事實並非如此,Emacs 是一個很好的 IDE,它支援將 Lisp 指令碼作為一般的系統可執行檔案來執行。

除了 Elisp 之外,還有兩種流行的現代 Lisp 可以很容易地用來作為獨立指令碼執行。

  1. Racket:你可以通過在系統上執行 Racket 來提供執行 Racket 指令碼所需的執行時支援,或者你可以使用 raco exe 產生一個可執行檔案。raco exe 命令將程式碼和執行時支援檔案一起打包,以建立可執行檔案。然後,raco distribution 命令將可執行檔案打包成可以在其他機器上工作的發行版。Emacs 有許多 Racket 工具,因此在 Emacs 中建立 Racket 檔案既簡單又有效。
  2. GNU GuileGNU GuileGNU 通用智慧語言擴充套件GNU Ubiquitous Intelligent Language for Extensions 的縮寫)是 Scheme 程式語言的一個實現,它可以用於為桌面、網際網路、終端等建立應用程式和遊戲。Emacs 中的 Scheme 擴充套件眾多,使用任何一個擴充套件來編寫 Scheme 都很容易。例如,這裡有一個用 Guile 編寫的 “Hello world” 指令碼:
#!/usr/bin/guile -s!#(display "hello world")     (newline)

guile 編譯並允許它:

$ guile ./hello.scheme;;; compiling /home/seth/./hello.scheme;;; compiled [...]/hello.scheme.gohello world$ guile ./hello.schemehello world

無需 Emacs 允許 Elisp

Emacs 可以作為 Elisp 的執行環境,但是你無需按照傳統印象中的必須開啟 Emacs 來執行 Elisp。--script 選項可以讓你使用 Emacs 作為引擎來執行 Elisp 指令碼,而無需執行 Emacs 圖形介面(甚至也無需使用終端)。下面這個例子中,-Q 選項讓 Emacs 忽略 .emacs 檔案,從而避免由於執行 Elisp 指令碼時產生延遲(若你的指令碼依賴於 Emacs 設定中的內容,那麼請忽略該選項)。

emacs -Q --script ~/path/to/script.el

下載 Emacs 備忘錄

Emacs 許多重要功能都不是只能通過 Emacs 來實現的;Org 模式是 Emacs 擴充套件也是一種格式標準,流行的 Lisp 方言大多不依賴於具體的應用,我們甚至可以在沒有可見或可互動式 Emacs 範例的情況下編寫和執行 Elisp。然後若你對為什麼模糊程式碼和資料之間的界限能夠引發創新和效率感到好奇的話,那麼 Emacs 是一個很棒的工具。

幸運的是,現在是 21 世紀,Emacs 有了帶有傳統選單的圖形介面以及大量的文件,因此學習曲線不再像以前那樣。然而,要最大化 Emacs 對你的好處,你需要學習它的快捷鍵。由於 Emacs 支援的每個任務都是一個 Elisp 函數,Emacs 中的任何功能都可以對應一個快捷鍵,因此要描述所有這些快捷鍵是不可能完成的任務。你只要學習使用頻率 10 倍於不常用功能的那些快捷鍵即可。

我們匯聚了最常用的 Emacs 快捷鍵成為一份 Emacs 備忘錄以便你查詢。將它掛在螢幕附近或辦公室牆上,把它作為滑鼠墊也行。讓它觸手可及經常翻閱一下。每次翻兩下可以讓你獲得十倍的學習效率。而且一旦開始編寫自己的函數,你一定不會後悔獲取了這個免費的備忘錄副本的!