在 emacs 下讓某些 Mode 預設不顯示行號

在 emacs 中,因為行號顯示並不是透過 elisp 核心來進行處理,所以顯示 速度相對的比較慢,此外,很多時候我們並不需要顯示行號,比如在使用 eshell 或是 term 時,顯示行號反而變得怪怪的。

那要怎樣才能讓 emacs 在特定的模式下不顯示行號呢?

首先,我們先定義一個負責存放不顯示行號的 Mode 的列表

(setq inhibit-linum-mode-alist
      '(
        eshell-mode
        shell-mode
        term-mode
        ))

接著,透過 elisp advice 的功能,當 emacs 呼叫 linum-mode 顯示時, 先檢查該 major-mode 是否有在 inhibit-linum-mode-alist 裡面, 如果有的話,則不啟用 linum-mode。

(defadvice linum-on (around inhibit-for-modes activate)
  "Stop turing linum-mode if it is in the inhibit-linum-mode-alist."
  (unless (member major-mode inhibit-linum-mode-alist)
    ad-do-it))

最後,當然就是讓 emacs 全域性的啟用 linum-mode 了

(global-linum-mode 1)

這樣,emacs 預設是會顯示行號的,僅有在被設定的模式中,會停止行號的顯示。