檢視原始碼 Emacs 的 Erlang 模式

目的

本使用者指南的目的是向您介紹 Emacs 的 Erlang 模式,並提供有關其功能和特性的相關背景資訊。另請參閱Erlang 模式參考手冊。Erlang 模式本身的目的在於促進 Erlang 程式設計師的開發過程。

先決條件

具備 Emacs 和 Erlang/OTP 的基本知識。

Elisp

此工具套件中包含兩個用於 Emacs 的 Elisp 模組。erlang.el 定義了實際的 Erlang 模式,而 erlang-start.el 則進行了一些不錯的初始化設定。

在 UNIX 上設定

若要在 UNIX 系統上設定 Erlang Emacs 模式,請編輯或在您的主目錄中建立檔案 .emacs

以下是一個完整的範例,說明應將哪些內容新增至使用者的 .emacs 中,前提是 OTP 安裝在目錄 /usr/local/otp

(setq load-path (cons  "/usr/local/otp/lib/tools-<ToolsVer>/emacs"
load-path))
(setq erlang-root-dir "/usr/local/otp")
(setq exec-path (cons "/usr/local/otp/bin" exec-path))
(require 'erlang-start)

在 Windows 上設定

若要在 Windows 系統上設定 Erlang Emacs 模式,請編輯/建立檔案 .emacs,該檔案的位置取決於系統的設定。如果設定了 *HOME* 環境變數,Emacs 將在 HOME 變數指示的目錄中尋找 .emacs 檔案。如果未設定 HOME,Emacs 將在 C:\ 中尋找 .emacs 檔案。

以下是一個完整的範例,說明應將哪些內容新增至使用者的 .emacs 中,前提是 OTP 安裝在目錄 C:\Program Files\Erlang OTP

(setq load-path (cons  "C:/Program Files/Erlang OTP/lib/tools-<ToolsVer>/emacs"
load-path))
(setq erlang-root-dir "C:/Program Files/Erlang OTP")
(setq exec-path (cons "C:/Program Files/Erlang OTP/bin" exec-path))
(require 'erlang-start)

注意

.emacs 中,可以使用斜線字元 (/) 作為路徑分隔符號。但是,如果您決定使用反斜線字元 (\),請注意反斜線必須加倍,因為它們會被 Emacs 視為跳脫字元。

縮排

《牛津當代英語學習詞典》對「indent」一詞的解釋如下:

「(印刷或書寫的行)比其他行更遠離邊界開始」。

Erlang 模式當然提供了此功能。使用的版面配置是基於該語言的常用用法。

強烈建議使用此功能,並避免以非標準的方式縮排程式碼行。原因如下:

  • 使用相同版面配置的程式碼易於閱讀和維護。
  • 由於 Erlang 模式的數個功能都是基於標準版面配置,因此如果使用非標準版面配置,它們可能無法正常運作。

縮排功能可用於重新縮排檔案的大區塊。如果某些程式碼行使用非標準的縮排,它們將被重新縮排。

編輯

  • M-x erlang-mode RET - 此命令會為目前的緩衝區啟用 Erlang 主要模式。當此模式處於活動狀態時,模式行會包含單字「Erlang」。

當 Erlang 模式正確安裝後,當在 Emacs 中開啟以 .erl.hrl 結尾的檔案時,它會自動啟用。

儲存檔案時,會針對檔案名稱檢查 -module(). 行中的名稱。如果它們不匹配,Emacs 可以變更模組指定符,使其與檔案名稱相符。預設情況下,在執行變更之前會詢問使用者。

「電動」命令是一個字元,除了插入字元之外,還會執行某種動作。例如,在結束函式子句的情況下鍵入 ; 字元時,會產生新的函式標頭。電動命令如下:

  • erlang-electric-comma - 插入逗號字元,並可能插入新的縮排行。
  • erlang-electric-semicolon - 插入分號字元,並可能插入下一行的原型。
  • erlang-electric-gt - 插入 > 字元,並可能插入新的縮排行。

若要停用所有電動命令,請將變數 erlang-electric-commands 設定為空清單。簡而言之,請將以下行放置在您的 .emacs 檔案中

(setq erlang-electric-commands '())

語法突顯

Emacs 可以在顯示緩衝區時使用色彩。所謂「語法突顯」,指的是將對語法元件(例如關鍵字和函式名稱)著色。

語法突顯的基本概念是讓程式的結構更清晰。例如,突顯功能可讓您更容易發現簡單的錯誤。您是否曾只用小寫字母寫過變數?透過語法突顯,變數會以不同色彩顯示,而原子會以正常文字色彩顯示。

標籤

標籤是標準的 Emacs 套件,用於記錄大型開發專案中來源檔案的相關資訊。除了列出專案的檔案之外,標籤檔案通常還包含有關定義的所有函式和變數的資訊。到目前為止,標籤系統最有用的命令是其在專案中的任何檔案中尋找函式定義的功能。但是,標籤系統不限於此功能,例如,可以在專案中的所有檔案中執行文字搜尋,或執行專案範圍的搜尋和取代。

為了使用標籤系統,必須建立一個名為 TAGS 的檔案。該檔案可以被視為專案中所有檔案中所有函式、記錄和巨集的資料庫。可以使用兩種不同的 Erlang 方法建立 TAGS 檔案。第一種是標準 Emacs 工具「etags」,第二種是使用 Erlang 模組 tags

Etags

etags 是 Emacs 發行版的一部分。它通常從命令列執行,例如 Unix shell 或 DOS 方塊。

較新版本的 Emacs 和 XEmacs 的 etags 程式具有對 Erlang 的原生支援。若要檢查您的版本是否包含此支援,請在命令列提示符號處發出命令 etags --help。在說明文字的末尾,有一個支援語言的清單。除非 Erlang 是此清單的成員,否則我建議您升級到較新版本的 Emacs。

如說明文字中所見(除非您尚未升級 Emacs),etags 將檔案副檔名 .erl.hrl 與 Erlang 相關聯。

基本上,etags 工具是以以下形式執行的

etags file1.erl file2.erl

這將在目前目錄中建立一個名為 TAGS 的檔案。

etags 工具也可以透過提供單一破折號來取代檔案名稱,從其標準輸入中讀取檔案清單。當專案包含大量檔案時,此功能非常有用。標準的 UNIX 命令 find 可用於產生檔案清單,例如

find . -name "*.[he]rl" -print | etags -

上述程式碼行將建立一個 TAGS 檔案,涵蓋目前目錄以及以下子目錄中的所有 Erlang 原始程式碼檔案。

請參閱 GNU Emacs 手冊和 etags man 頁面,以取得更多資訊。

Shell

在 Emacs 內部的 Erlang shell 的外觀和風格應與正常的 Erlang shell 相同。只有一個主要差異,游標鍵實際上會像在任何正常的 Emacs 緩衝區中一樣移動游標。可以使用以下命令存取命令列歷史記錄

  • C-上M-p(comint-previous-input) - 移動到輸入歷史記錄中的上一行。
  • C-下M-n(comint-next-input) - 移動到輸入歷史記錄中的下一行。

如果 Erlang shell 緩衝區被終止,則命令列歷史記錄會儲存到檔案中。當新的 Erlang shell 啟動時,會自動擷取命令列歷史記錄。

編譯

Erlang 的典型編輯-編譯-錯誤修正週期是在編輯器中編輯來源檔案,將其儲存到檔案中,然後切換到 Erlang shell。在 shell 中給出編譯命令。如果編譯失敗,您必須開啟編輯器並找到正確的程式碼行。

透過 Erlang 編輯模式,可以在不離開 Emacs 的情況下執行整個編輯-編譯-錯誤修正週期。Emacs 可以命令 Erlang 編譯檔案,並且可以剖析錯誤訊息,以自動將指標放置在錯誤的程式碼行上。