帰宅後科学者

オタクですが何か?

Emacs 入坑引導 - 打造自己的 Ruby IDE - Part 1

前言

工欲善其事,必先利其器,出色的工匠都有自己熟練的工具;傑出的戰士都有自己拿手的兵器;優秀的碼農都有自己慣用的 Editor。世間 Editor 千百種,AtomVSCodeSublime、Notepad++(?)... 等皆是現代碼農之所好。但萬變不離其宗,每個 Editor 都有相似之處,追求的都是更便捷的文字編輯功能,讓程式碼更容易閱讀、修改。選好一個 Editor 是躍升專業碼農的第一步,挑選適合自己的 Editor 就像挑老婆一樣,必須用心陪伴,才能了解其本質與內含,進一步決定能否成為自己一生的伴侶,而非從表面上判斷。現代大多數 Editor 都有漂亮的包裝,功能也相當完整,但有二個從上古時代流傳至今,其外表看似難以接近,但仍然頂立於眾 Editor 之上,被眾多碼農所愛,其名為 EmacsVim

EmacsVim 之所以在頂尖碼農們之中無人不知、無人不曉,甚至被譽為「神之編輯器」就在於其極為強大的功能,且各自有其特點與不同的本質,也因此導致兩家 Editor 各自形成派別,相互歧視,因而發生了繼第二次世界大戰之後最慘烈的戰爭,其名為「Editor war」。

這兩家 Editor 共同的特點就是難以入門,因為與其他 Editor 不同的奇特 Key binding 讓許多新手碼農怯而遠之,就算努力點成功越過這道牆而開始入門探索,也必須花許多時間熟練,才能夠真正掌握並充分運用它讓自己更幸福地 Coding。

從其他現代的 Editor 甚至 IDE 而轉戰 EmacsVim 是一件極其艱難的事,而從 EmacsVim 之中做抉擇也令人困惑而猶豫不決,以下將一步步介紹 Emacs 的基礎,並打造出自己的 Ruby IDE

BEST RUBY EDITORS Best ruby editors, 圖片來源:https://www.sitepoint.com/editor-rubyists-use/

Emacs V.S. Vim

網路上流傳著這麼一張圖: Editors Learning Curve Editor learning curves

上圖是各種 Editor 的學習曲線,所謂學習曲線根據維基百科定義:

學習曲線是對某種活動或工具的學習速率(平均情況)的圖形化表示。一般來說,剛開始時掌握信息的速率曲線最為陡峭,之後則逐漸變得平緩,這表明之後的學習過程中對新信息的掌握速率會越來越慢。

從上圖可知,大多數 Editor 在學習初期到後期都是呈現一個平滑陡峭的曲線,之後持續穩定,與維基上所說的一般情況相符。這表示剛開始會需要學比較多東西,學習的速度也會比較慢,但一段時間之後就大致可以掌握,也比較難學到新的東西了。

但其中有兩個曲線特別出眾,Vim 是一條從頭到尾都在高處的直線,表示入門的時候學習難度極高,但就算學了一陣子之後難度依舊不便,意思是 Vim 提供許多東西可以學,要完全熟練 Vim 是件極為困難的事。

另外一個就是 Emacs,可以看到 Emacs 的曲線是一條從原點出發的棒棒糖,表示入門的時候學習難度較低,到了中期掌握了一些基本之後難度會越來越高,但永遠不會有後期的到來,因為你已經被 Emacs 廣大的世界給吞噬了。

在這兩個奇耙的 Editor 之中做選擇,導致了兩派使用者相互主觀地評論對方,結果只會導致新手碼農遭到洗腦。因此這邊會以客觀的方式來評論兩家的優缺點。

比較

執行環境

首先在執行環境上,EmacsVim 都是從幾十年前電腦還沒有 GUI 就被開發出來的,因此都能直接在 Terminal 上執行,若要在 GUI 上執行,GNU Emacs 本身就提供 GUI 的環境,Vim 則可以透過 GVim 來達成。使用 Terminal 或 GUI 取決於個人的需求,通常在 Emacs 會推薦用 GUI,因為 GUI 可提供的功能更多,例如顯示圖片、網頁等等。

開啟時間

許多人支持 Vim 所主張的原因之一就是其開啟檔案的速度快,反而批評 Emacs 慢,但從客觀的角度上看,這點完全沒有比較的必要,因為這取決各自的使用方式,在 Emacs 可以完全無視初次開啟時的時間花費,因為 Emacs 的開啟通常是隨著電腦開機時一起啟動的,而且只會啟動一次,而開啟檔案的時間幾乎沒差(瞬間)。

本質定位

VimEmacs 有著本質上的不同,Vim 本身的定位就是徹徹底底的 Editor,而常常有主觀的 Vimer 笑說:Emacs 是個好的 OS,只差沒有好的 Editor,這句話前半段有理,後半段可無視。也有人說: 對我來說 Emacs 才是我的 OS,Linux 只不過是用來啟動 Emacs 的 Bootloader,會有這些言論的原因在於 Emacs 本身提供的功能包山包海,例如除了 Editor 本身的功能外,還可看圖片、聊天、收發信件、瀏覽網頁(雖然不好用?)...... 等,也提供專案管理、git 操作(像 GitKraken 那樣)、Shell,甚至要將它變成一個 Ruby IDE 也行。總而言之你可以透過 Emacs 使用許多平時常用的功能(除了瀏覽器:)),Editor 比較像是剛好在 Emacs 這個 OS 裡面的功能之一而已,甚至已經許多套件都能將 Vim 實現在 Emacs 內了。

擴充語言

Vim 的擴充語言是 Vim script,而 EmacsEmacs Lisp,先不論效率或學習難易等,兩者最大的差別其實在於,Vim script 只是 Vim 的擴充用的語言,Vim 本身大多還是用 C 實做:而 Emacs 本身大多都是用 Emacs Lisp 寫成的。在 VimVim script 與 C 的比例大約是 1:1,而在 EmacsEmacs Lisp 與 C 的比例大約是 4:1,很明顯的 Vim 相較之下比較依賴於 C。論功能面無論主觀客觀,在事實上 Emacs Lisp 可達到的功能都是比較多的,你可以找到在 Emacs 裡面實作的 Vim,但你找不到在 Vim 裡面實作的 Emacs,不過單論寫 Editor 方面的功能,兩者提供的功能都差不多。

按鍵

無論使用 VimEmacs 你都不需要動用到滑鼠,若你在 coding 的時候使用滑鼠,會導致你的手需要在鍵盤與滑鼠之間移動,導致效率下降。既然不需要滑鼠,那麼鍵盤上的按鍵配置就變得相當重要。VimEmacs 最大的差異就是彼此不同的按鍵配置,且不像其他如 AtomVSCode 之間快捷鍵的不同,VimEmacs 在根本上就是兩個世界。Vim 支援 Mode 的切換,在 Normal mode 的時候可以按 HJKL 等來移動游標,按下 I 可以切換至 Insert mode,在 Insert mode 可以直接輸入文字,也就是說在不同 Mode 會有不一樣的按鍵組合,所以可以在同一個按鍵上同時達到不同的功能,也不影響輸入。而在 Emacs 中由於沒有方便的 Normal mode、Insert mode 等,因此幾乎執行任何動作時都會一起按下 Ctrl,例如 Ctrl + F 就是游標向右一格,但要輸入文字時就可以直接輸入。由於按下 Ctrl 的通常是用小指,所以常常有人會覺得用 Emacs 久了小指會受傷,這個筆者也認了,不過能到達受傷的程度至少要用個幾十年吧?

語言支援

VimEmacs 對大多數的語言都有支援,就算沒支援也可以再擴充。對語言的支援包含語法高亮、語法檢查、錯字檢查、自動補齊...... 等等,這對大多數 Editor 都是有支援的。

結論

兩種 Editor 各有特色,也有許多共通的特點,選擇那一邊完全取決於個人的嗜好,不過若能將兩家 Editor 的特點融合在一起,那就沒什麼衝突了。幸好透過 Emacs 強大的擴充功能,的確已經有許多大神在 Emacs 裡面加入了 Vim 強大的按鍵與 Mode,讓你可以同時使用 Vim 方便的按鍵組合與 Emacs 大量功能強大的指令,如此一來就能平息持續多年的 Editor war 了。

安裝

以上講了這麼多 Emacs 的特色,接下來就開始讓好奇又興奮的各位碼農們排隊入坑吧!

Emacs 在大多數 OS 都有支援,安裝方式也很簡單:

MacOS

brew install emacs

Linux

Debian/Ubuntu

apt install emacs

Red Hat/Centos

yum install emacs

Arch/Manjaro

pacman -S emacs

BSD

FreeBSD

pkg_add -r emacs

OpenBSD

pkg_add -i emacs

Windows

Windows 版本可以在這邊下載: http://ftp.gnu.org/pub/gnu/emacs/windows/

也可以透過 MSYS2 安裝:

pacman -S mingw-w64-x86_64-emacs

也可上 GNU Emacs 官網 直接下載 Source Code 來安裝。

執行

Emacs 跟其他 Editor 一樣透過可 Command line 開啟檔案:

emacs <PATH>

Emacs 的設定檔通常存放在 $HOME 底下的 .emacs.d 資料夾裡面,或者是 .emacs 檔案本身,開啟 Emacs 的同時就會自動載入設定。當不需要使用這些設定檔,想要直接開啟乾淨的 Emacs 的話,可在執行時加入 -q 參數:

emacs -q <PATH>

嚴格來講 .emacs.emacs.d 並不是設定檔,而是像 .bashrc 之類的在開啟階段先執行的檔案,裡面寫的是真正的 code。

如果不想用 GUI 開啟 Emacs,可以加上 -nw

emacs -nw

通常使用 Emacs 一段時間後,就會開始安裝許多套件,一旦套件數量愈來愈多,直接開啟 Emacs 的時間就會增加,因此大多 Emacer 都不會將 Emacs 關閉,而是選擇活在 Emacs 裡,直到電腦重開。但是當我們只是想要在其他 Terminal 上修改檔案,或者開啟新的專案時,還是會想要在 Terminal 上下指令開啟檔案。

Emacs 本身提供 Daemon 模式,可以將 Emacs 運行於背景,當要連接這個 Daemon 可以透過 emacsclient 指令:

emacs --daemon // 開啟 Emacs daemon
emacsclient <PATH>

使用 emacsclient 開啟檔案不需要讀取套件及設定檔,因此幾乎沒有等待時間,可瞬間開啟檔案。emacsclient 預設直接執行在 Terminal 上,如果要在 GUI 執行可加上 -c 參數:

emacsclient -c <PATH>

關閉 Emacs daemon

emacsclient -e "(kill-emacs)"

-e 參數跟 ruby -e 的作用一樣(eval),可以直接執行一段 Code,在 Emacs 就是執行 Emacs Lisp(簡稱 elisp),kill-emacselisp 的內建 Function,而用括號包起來是 Lisp 呼叫 Function 的方式。

第一次打開 Emacs 可能會長這樣,

這個畫面看起來有點醜,不過之後我們就會讓它面目一新囉。

初始設定

如果直接開啟 Emacs 就會出現上圖所示的預設畫面,但如果在開啟的時候同時給一個路徑:

emacs hello.rb

會長這樣,

如圖所示,Emacs 會幫你開啟二個 window,上面是你現在要編輯的檔案,下面是剛剛出現過的預設畫面。但我們不想要每次從 Terminal 開檔都跑出煩人的預設畫面,接下來我們就可以來更改一下 Emacs 的設定檔讓它消失!

初始化檔案

Emacs 的自訂設定通常放在 ~/.emacs 檔案內或者 ~/.emacs.d/ 資料夾裡,不過 Emacs 預設並不會自動生成 .emacs 檔。

若想要將設定分的比較細一點,就可以用 .emacs.d/ 資料夾來存放設定,用 .emacs.d/ 的話預設會先讀取 .emacs.d/init.el 這個檔案。

Emacs 預設的讀取順序是 ~/.emacs~/.emacs.el~/.emacs.d/init.el,筆者推薦用 .emacs.d/ 來管理設定,但這邊為了簡潔就先用 ~/emacs

取消預設畫面

要讓預設畫面消失,必須先打開 Emacs 的設定檔 ~/.emacs,這檔案剛開始可能不存在,就直接建立一個:

emacs ~/.emacs

之後在這個檔案加入下列 elisp 程式碼:

;; ~/.emacs

(setq inhibit-startup-message t)

之後重開 Emacs 就只會看到開啟的檔案了。

setq 是指派變數 (assign) 的 Function,tnil 分別指 truefalse,所以 (setq inhibit-startup-message t) 就是將 inhibit-startup-message 這個變數的值設為 true

內建教學

Emacs 提供內建的教學說明文件,在剛剛的預設畫面上即可看到 Emacs Tutorial 的選項,新手建議先照這份教學跑完一遍,就能大致掌握 Emacs 的用法囉!

基本 Key binding

進入 Emacs 的世界後,我們就要開始捨棄掉平時常用的幾個按鍵,包含 UpDownLeftRightHomeEndDeleteBackspaceTabEnter 等等,這些處在邊邊角角的鍵只會導致雙手大幅移動,降低打字效率。

那在 Emacs 要怎麼達到這些按鍵的功能,又不需要使用到這些鍵呢?

Emacs 對應鍵 功能
C-p Up 游標往上一格
C-n Down 游標往下一格
C-b Left 游標往後一格
C-f Right 游標往前一格
C-a Home 游標移到最前面
C-e End 游標移到最後面
C-d Delete 刪掉後面一個字
C-h Backspace 刪掉前面一個字
C-i Tab 縮排
C-m Enter 換行、確定

C=Ctrl M=Alt (註:C-hEmacs 預設是 help,之後我們會將它變成刪除鍵)

上表一一對應在 Emacs 內與其他常用鍵達到同樣功能的按鍵組合,C 表示 Ctrl 鍵,所以 C-p 就是按住 Ctrl 鍵後在同時按下 p 鍵。

Emacs 幾乎任何動作都脫離不了 CtrlAlt 鍵,在 Emacs 官方文件中分別將這兩個鍵用 CM 來表示,因此之後我也會用這兩個字母表示。

以上組合必須經常練習才會記在身體裡,也就是某人所提倡的肌肉記憶。但為何 Emacs 當初設計時要將這些相關連的鍵定義在這些鍵上呢?仔細觀察一下就能發現這些鍵在定義的時候其實是根據每個功能的英文決定的,如 C-pPreviousC-bBackC-iIndent 等。

熟練這些按鍵還有一個好處是在幾乎任何類 Unix 作業系統中提供的 Terminal 都支援這些組合,不信邪可自己打開 Terminal 試試。

有些 Unix 配置的鍵盤甚至直接將方向鍵移除,如 HHKB 等,原因就是使用 Emacs 的 Key binding 的話根本用不到這些鍵。

上述按鍵組合只不過是 Emacs 的一小部份而已,以下我再列出幾個常用的:

Emacs 功能 說明
C-v 往下一頁
M-v 往上一頁
C-l 維持游標位置並重新定位畫面 重複執行的話會分別在 top、center、bottom 的位置作切換
C-s 往下搜尋文字
C-r 往上搜尋文字
C-g 離開指令 遇到指令執行不順可先嘗試按按這個來結束指令執行
C-o 換行但不移動游標
C-k 殺掉游標後到換行字元前的文字
C-w 殺掉目前選取的文字
C-y 貼上保存在 kill ring 的文字 通常搭配 C-kC-w 使用,來達成剪下貼上等功能
C-b 切換 Buffers
C-x k 殺掉 Buffer
M-< 移動游標到 Buffer 最前面
M-> 移動游標到 Buffer 最後面
C-x C-s 存檔
C-x C-c 關閉 Emacs

C=Ctrl M=Alt

Kill RingEmacs 特有的像是剪貼簿的列表,它會將你上次透過像是 C-kC-w 所 Kill 掉的字串存進去,之後可以利用 C-y 將它貼回 Buffer。C-y 預設會取用最後存入的字串,如果想要貼回 Kill Ring 中其中一段字串,可以重複按 M-y 來選擇。

指令

Emacs 預設就有 2812 個指令,筆者使用的 Emacs 有 7067 個指令,若使用 Spacemacs 這樣的 Starter Kit 甚至可達好幾萬個,這麼多的指令根本沒辦法一一用按鍵組合來對應。Emacs 預設有 1353 個按鍵組合,但我們平常根本用不到那麼多,自然不會去記住這麼多的組合,那當我們想要使用某個指令的時候但不知道按鍵時,就可以直接輸入指令。

使用指令

Emacs 可以用 M-x 來輸入指令,例如我想要使用 help 的指令,可以輸入 M-x help

什麼是指令?

Emacs 的每個指令都是一個用 elisp 寫的 Function,例如我們可以隨便開一個檔案,在空白處輸入:

(help)

在最後一個括號後面按 C-x C-e 來執行,這樣就會呼叫 help 這個 Function。

我們也可以試著定義一個指令,用 elisp 寫一個在游標後插入 Hello, World! 字串的 Function:

(defun hello ()
  (insert "Hello, World!"))

同樣在最後一個括號後按 C-x C-e 執行後,就可以輸入:

(hello)

你的畫面上就會出現 Hello, World! 這串字了。

但是這樣還不算是個 Emacs 指令,必須讓這個 Function 能夠用 M-x 來執行,讓我們將 hello 的定義內加入 (interactive)

(defun hello ()
  (interactive)
  (insert "Hello, World!"))

這麼一來就可以用 M-x 來找到 hello 這個 Function 了。

按鍵綁定

Emacs 提供許多 Function 可以幫助將指令綁定在自訂的按鍵上,例如要將 C-h 往後刪除一個字元 (delete-backward-char)的功能綁定的話,我們可以在 .emacs 檔案中加入以下設定:

(global-set-key (kbd "C-h") 'delete-backward-char)

重新打開 Emacs 即可。

global-set-key 會將指定的按鍵與所給的指令綁定在全域範圍內,也就是說不管在哪個 Buffer 下都會生效,當然 Emacs 也提供在特定 Buffer 或 Mode 中的按鍵綁定,但在本章中先暫且略過。

安裝套件

Emacs 有大量套件可以直接安裝,透過這些套件我們可以快速地為自己的 Emacs 做各種客製化。Emacs 預設的 repository 是使用 GNU 官方的 ELPA,不過 ELPA 的套件不多,所以通常都會利用MELPA 來取得更多套件。

套件列表

要列出所有可安裝與已安裝的套件可以透過指令 package-list-packages,如果想要安裝列表上的某個套件,可以將游標指到套件那行再按下 I,前面就會多出一個 I 的標記,之後按 X 就能開始執行下載安裝,如果想取消可以按 U,標記就會消失。

加入 MELPA

要加入 MELPA 上的套件必須先在 .emacs 裡加入一些設定:

(require 'package)
(let* ((no-ssl (and (memq system-type '(windows-nt ms-dos))
                    (not (gnutls-available-p))))
       (proto (if no-ssl "http" "https")))
  ;; Comment/uncomment these two lines to enable/disable MELPA and MELPA Stable as desired
  (add-to-list 'package-archives (cons"melpa"(concat proto"://melpa.org/packages/")) t)
  ;;(add-to-list 'package-archives (cons"melpa-stable"(concat proto"://stable.melpa.org/packages/")) t)
  (when (< emacs-major-version 24)
    ;; For important compatibility libraries like cl-lib
    (add-to-list 'package-archives'("gnu" . (concat proto "://elpa.gnu.org/packages/")))))
(package-initialize)

詳細可參考Getting Started

之後重開 Emacs 並執行 package-list-packages 之後,Emacs 會先將 ELPA 的套件讀取進來,再稍等一下就會將 MELPA 的套件也讀進來。由於大部分常用的套件都在 MELPA 上,所以這個動作基本是必要的。

MELPA 的套件可以直接到 MELPA 官網 上查看。

建議安裝套件

以下列出一些筆者建議安裝的套件列表,詳細以及打造 Ruby IDE 的部份將會在 Part 2 作介紹。

套件 功能 說明
company 自動補齊 需要根據不同語言來額外安裝其他 company 的套件。
projectile 專案管理
ivy 自動補齊 與 company 不同的是自動補齊指令輸入等比較通用型的部份。
counsel 強化指令輸入
counsel-projectile 強化 projectile
swiper 強化文字搜尋
avy 強化游標移動
undo-tree 強化 undo、redo
multiple-cursors 多游標
magit Git 管理操作
which-key 顯示 Key Map

如果要讓 Emacs 支援像 Python、Elixir 等語言,可以安裝 python-modeelixir-mode 等套件,根據自己的需求來選擇。

Buffers

Buffers扮演著重要的角色,當開啟檔案 (find-file) 的時候 Emacs 會自動產生該檔案的 Buffer,讓你可以透過 C-x b(switch-to-buffer)來切換 Buffer,如此可以保留每個檔案的 Session,不需要關閉檔案。每個 Buffer 都會有一個名字,當執行 switch-to-buffer 時給了一個不存在的 Buffer 名,Emacs 就會開啟一個新的 Buffer,Buffer 不一定是對應到一個檔案,可以只用來顯示結果、訊息,也可以顯示圖片,或者執行 Shell。

管理 Buffers

Emacs 預設將 C-x C-b 綁定到 list-buffers 指令,該指令會打開 Emacs 預設的 Buffer Menu,不過筆者推薦將這個按鍵重新綁定到 ibuffer 指令,Ibuffer 是進階版的 Buffer Menu,能讓你對 buffers 作分類管理。

(global-set-key (kbd "C-x C-b") 'ibuffer)

Frames

FramesEmacsGUI 視窗,Emacs 可以產生出多個視窗,但是共用同一個 daemon。Frames 是 GUI 版的 Emacs 才能使用的,在開啟 Emacs 時就會產生一個預設的 Frame,之後可以在這個 Frame 再產生新的 Frame,需要注意的是,在同一棵 Frame 的樹的其中一個節點用 C-x C-c 關閉 Emacs 會導致整棵樹的所有 Frame 也一起被關閉。

以下列出操作 Frames 的常用相關按鍵組合:

Emacs 功能
C-x 5 0 關閉目前的 Frame
C-x 5 1 關閉目前以外的所有 Frame
C-x 5 2 建立新的 Frame
C-x 5 o 切換至其他 Frame

Windows

Windows是在同一個 Frame 中可在切割出的視窗,我們可以在同一個畫面再水平或垂直地切割出多個視窗,顯示不同的 Buffer,並且在其中進行切換,這樣就不須使用到多個 Frame 來分割畫面。

以下列出操作 Windows 的常用相關按鍵組合:

Emacs 功能
C-x 0 關閉目前的 Window
C-x 1 關閉目前以外的所有 Window
C-x 2 垂直切割目前的 Window
C-x 3 水平切割目前的 Window
C-x o 切換至其他 Window

Shell

Emacs 有多種執行 Shell 的方式,其中一種是直接執行系統預設的 Shell 在 Emacs 的 Buffer 中,另一種是執行 Emacs 特有的 EShell,EShell 是透過 Emacs Lisp 實作的 Shell,提供像 Bash 等大多數 Shell 可執行的指令,也可以直接執行 Emacs Lisp,對於 Emacs 的進階使用者來說是個相當方便的 Shell。

執行 Shell 的 Buffer 只要輸入指令 M-x shell 即可。若只要執行一個指令卻又不想開啟新的 Shell Buffer,可以按 M-! 後輸入指令,執行結果會透過 Buffer 來顯示。

執行 EShell 同樣輸入指令 M-x eshell 即可。可以試試看在 EShell 中使用 ls 等基本指令,這些指令都是用 Emacs Lisp 實作,但用法跟 Bash 差不多。另外也可以試試看執行 Emacs Lisp 的 Function:(message "hello"),結果會跟 echo "hello" 一樣,但你不能執行 (echo "hello")

Emacs 中使用 Shell 的好處之一在於可以在 Shell 的 Buffer 中移動游標,就像在一般的檔案中進行複製貼上等文字操作,而不需要像一般 Terminal 那樣使用滑鼠來選取文字。

Remote Files

Remote filesEmacs 可以透過 SSH 等方法來操作遠端機器上的檔案或執行指令等。使用時只需要透過 C-x C-f(find-file)就像操作本機檔案一樣,但是需要在檔案路徑前加上遠端機器位置與使用者名稱等資訊:

/method:host:filename
/method:user@host:filename
/method:user@host#port:filename

例如想要用 SSHmyhost 機器上透過使用者 myuser 來存取 ~/hello.rb 檔案的話可以輸入:

/ssh:myuser@myhost:~/hello.rb

這樣就可以遠端存取 hello.rb 了,操作檔案時會在自己的機器上,但存檔後會直接存在遠端機器上,不用擔心網路速度導致編輯檔案時的延遲。

許多人覺得 Vim 最大的優點在於它在許多機器上都是內建好的,而且不用吃太多效能。但如果我們要存取的機器是可以用網路來遠端存取的話,甚至不需要在機器上安裝任何 Editor,只要透過 Emacs 就能輕易地在其中操作檔案。

小結

Part 1 的部份我們簡介了 EmacsVim 的比較、Emacs 的安裝、按鍵操作、套件以及 Buffers 等等基本元素,了解這些並好好練習,掌握 Emacs 的基本操作之後,才能更加深入。在 Part 2 會開始介紹如何透過各種套件以及自己撰寫的 Emacs Lisp 來打造自己專屬的 Ruby IDE

Starter Kits

網路上有許多 Emacs 的 Starter kit 可以使用,這些都是已經幫你設定好的 .emacs.d,不過通常會提供許多選項讓你可以在其中選擇需要的功能。剛入門其實也可以先玩玩看這些 Starter kit,不但省去許多設定的麻煩,熟了之後還可以參考這些高手們的設定來從頭寫一份屬於自己的。

以下是比較知名的幾個Starter Kits

其中比較特別的是 Spacemacs,如果你是從 Vim 轉到 Emacs 的高手,或者是完全懶得設定的菜鳥,都強烈推薦可以試試。

切換設定檔

如果想要嘗試多種 Starter kit,然後又不想要複製來複製去的,可以將這些設定檔的專案通通存在其他地方,然後使用 ln -s 指令來將這些資料夾連結到 ~/.emacs.d,這樣就可以隨時進行切換了。

相關文件連結

如果對 Emacs 已經產生極大的興趣,想要跟深入了解,可以參考以下幾個網站: