最終更新日: 2019-01-21 月 00:12
ホーム | 文書トップ | 目次

Emacs 補完関連

Table of Contents

概要

ivy & counsel & swiper

文字列の補完を行うパッケージについて。

それぞれが関連しているようなので、ivy、counsel、swiper、一旦まとめて扱う。

これらをインストールすることで、さまざまなシチュエーションで、ミニバッファのサイズが垂直方向に拡大され補完候補が出てくるようになる。

補完機能が強化されるもの

  • M-x 自体
  • C-x d (M-x dired)
  • C-x f (M-x find-file)
  • GNU GLOBAL (gtags) の I/F

等。

ただし、ivy-mode 1 にすると gtags で候補が表示されるのだが、 default の候補があった場合でも別の候補が選択されてしまい使いにくいので ivy-mode 0 とした。

カレントバッファの検索

また、C-s (isearch-forward)、C-r (isearch-backward) のように、カレントバッファの検索を行いたいケースで使えるものが swiper である。

occur に似ているインタフェースで、ミニバッファにgrep結果がリスト表示され、リストを上下することでカレントバッファ中の対象行に順次ジャンプするような動きをする。

なお私は、swiper を C-s に割り当てる(isearchを置き換える)のではなく、別のキー操作(C-c a)に割り当てた。

swiperは、ミニバッファ生成後は上下移動する仕様のようで、 C-s を swiper とすると、ミニバッファ生成後に backward を C-r でやりたくなるのだが、swiper では別の動作(Reverse-i-search)が動いてしまい、混乱するのであえて別にした。

設定

最終的なもの

(when (locate-library "counsel")
  (require 'counsel)
  (counsel-mode 1)
)

(when (locate-library "swiper")
  (require 'swiper)
  (global-set-key (kbd "C-c a") 'swiper)
)

試行錯誤中のもの2

(when (and (locate-library "ivy")
           (locate-library "counsel")
           (locate-library "swiper"))
  (require 'ivy)
  (ivy-mode 1)
  (global-set-key (kbd "C-c a") 'swiper)

;  (setq ivy-height 20)
  (setq ivy-re-builders-alist
        '((t . ivy--regex-plus)))
)

試行錯誤中のもの1

; needs ivy, counsel, swiper
(when (locate-library "ivy")
  (require 'ivy)
  ;; counsel: M-x
  ;; swiper: M-x swiper
  ;; find-file: C-x C-f
  (ivy-mode 1)

  (global-set-key (kbd "C-c a") 'swiper)

;  (fset 'ivy--regex 'identity)
;  (setq ivy-use-virtual-buffers t)
;  (setq enable-recursive-minibuffers t)
;  (setq ivy-height 20) ;; minibufferのサイズを拡大!(重要)
;  (setq ivy-extra-directories nil)
  (setq ivy-re-builders-alist
        '((t . ivy--regex-plus)))

  ;; counsel設定
;  (global-set-key (kbd "M-x") 'counsel-M-x)
;  (global-set-key (kbd "C-x C-f") 'counsel-find-file) ;; find-fileもcounsel任せ!
;  (defvar counsel-find-file-ignore-regexp (regexp-opt '("./" "../")))
)

; (defun isearch-forward-or-swiper (use-swiper)
;   (interactive "P")
;   (let (current-prefix-arg)
;     (call-interactively (if use-swiper 'swiper 'isearch-forward))))
; 
; (global-set-key (kbd "C-s") 'isearch-forward-or-swiper)

(when (locate-library "swiper")
  (require 'swiper)
)

(when (locate-library "counsel")
  (require 'counsel)
)

参考

ホーム | 文書トップ | 目次
Created by Emacs 27.1 (Org mode 9.3)