[Emacs-6] 讓你更快速執行指令的套件, Ivy-mode

Jerry Hsieh
4 min readOct 7, 2018

--

Ivy-mode: 更快執行指令,更快搜尋的次模式

  • 前面提到過,一般在 Emacs 執行指令,除了可以綁住一些組合鍵外,如果有像是在寫程式時的自動補全功能,也就是你不用打完整段指令,用選的來執行,是不是還可以更快些?
  • 在 Emacs 的環境中,有多種選擇來做這種增加生產力的套件,像是最常見的 ivy-mode, helm-mode,這裏我們介紹 ivy-mode
  • 當你用一些片段的句子,例如原先要執行 Meta-x package-list-packages 你可以只打 Meta-x pa list pa,就可以顯示一串符合的字串來讓你選擇,如
  • 又像是 Ctrl-x Ctrl-f 來開啟檔案時,也可以用一部分的關鍵字來開啟,例如
  • Ivy-mode 其實包含幾個工具
  • Ivy: 一種客製化的小緩衝區顯示方式,例如前面例子裡的小緩衝區的操作,就是用 Ivy 來客製化
  • Counsel: 取代原生的一些常用指令,改用 Counsel 透過 ivy 來執行,例如前面的 Ctrl-x Ctlr-f就取代了原生的 Find File 指令
  • Swiper: 取代原生的搜尋 I-search,改用跟 ivy 介面的更方便的搜尋

安裝

  • 安裝 ivy: 使用前面介紹的 use-package
(use-package ivy
:ensure t
:diminish (ivy-mode . "")
:config
(ivy-mode 1)
(setq ivy-use-virutal-buffers t)
(setq enable-recursive-minibuffers t)
(setq ivy-height 10)
(setq ivy-initial-inputs-alist nil)
(setq ivy-count-format "%d/%d")
(setq ivy-re-builders-alist
`((t . ivy--regex-ignore-order)))
)
  • 基本上定義了小緩衝區的高度 ivy-height,設定初始的 list 為空 ivy-initial-input-alist nil,如何顯示總共符合的數目以及目前的位置 ivy-count-format “%d/%d”,當用 regex 可以不管次序 ivy — regex-ignore-order,這些可以看跟個人喜好調整,完整的說明請看ivy
  • 安裝 Counsel
(use-package counsel
:ensure t
:bind (("M-x" . counsel-M-x)
("C-x C-f" . counsel-find-file)))
  • 這裏我們只用了兩個,使用 counsel-M-x 來取代原先的 Meta-x,指令執行,以及檔案尋找及開啟的 counsel-find-file,其他還可以選的像是 counsel-describe-functioncounsel-describe-variable…詳細可以參考 counsel
  • 安裝 Swiper
(use-package swiper
:ensure t
:bind (("C-s" . swiper))
)

搜尋畫面例如,在小緩衝區中可以使用 pn 鍵來上下移動, 移動時上面緩衝區的游標也會跟著移動,要搜尋的字會用特別顏色顯示

安裝及操作影片請看

簡報請參考 我的部落格

如果你不想打這些程式,可以直接到 github 下載 init.el 到你的 **~/.emacs.d/**底下,直接開 Emacs 就會自動安裝好這些套件

--

--