Swiper, ivy, avy, migemoによるEmacsの検索強化

文章を書いている際に,ある単語を検索したくなるようなことがよくある.Emacsでのデフォルトはisearchであるが,今回は,これを強化するpackageを紹介する.また,最近開いたディレクトリ directory をまた開きたいこともよくあることである.これについてもivyによる検索が便利であるので紹介する.例によってネタ元を見たほうが早いかもしれない...(^^;;;

Table of Contents

swiper.el

Install & setup

  • 以下を,int.orgに書き込む.
#+begin_src emacs-lisp
(use-package swiper
  :ensure t
  :config
  (defun isearch-forward-or-swiper (use-swiper)
    (interactive "p")
    ;; (interactive "P") ;; 大文字のPだと,C-u C-sでないと効かない
    (let (current-prefix-arg)
      (call-interactively (if use-swiper 'swiper 'isearch-forward))))
  (global-set-key (kbd "C-s") 'isearch-forward-or-swiper)
  )

(use-package ivy
  :ensure t
  ;; :config
  ;; (fset 'ivy--regex 'identity)
  )
#+end_src
  • ivyのコメントアウトしている部分については後述する.

使い方

  • 現在開いているEmacsのバッファで,C-sとするだけでよい.

  • 下図は,ivyを検索しているところだが,下に"Swiper"と表示されるバッファが表示され,そこに”ivy”と打つと,上の本文の中のivyは黄色でハイライトされる.同時に下のバッファでは,現在見ているivyのある行に下線が引かれ,行数が横に示される.上下のArrow Keyでivyのある行から次の行に飛べる.リターンすれば本文のその行に行ける.非常に便利である.

migemo

cmigemoのinstall

  • まず,C言語で再実装されたcmigemoをインストールする.homebrewで簡単にインストールできる.–HEADのオプションが必要との記載もあるが,なくても同じであった.
$ brew install cmigemo

migemo.elのInstall & setup

  • 以下を,int.orgに書き込む.
#+BEGIN_SRC emacs-lisp
(use-package migemo
  :ensure t
  :config
  ;; C/Migemo を使う場合は次のような設定を .emacs に加えます.
  (setq migemo-command "cmigemo")
  (setq migemo-options '("-q" "--emacs" "-i" "\a"))
  (setq migemo-dictionary "/usr/local/Cellar/cmigemo/20110227/share/migemo/utf-8/migemo-dict")  ;; 各自の辞書の在り処を指示
  (setq migemo-user-dictionary nil)
  (setq migemo-regex-dictionary nil)
  ;; charset encoding
  (setq migemo-coding-system 'utf-8-unix))
#+END_SRC

avy-migemo(swiperのmigemo対応)

Install & setup

  • 以下を,int.orgに書き込む.
#+begin_src emacs-lisp
(use-package avy-migemo
  :ensure t
  :config
  (avy-migemo-mode 1)
  (setq avy-timeout-seconds nil)
  (require 'avy-migemo-e.g.swiper)
  (global-set-key (kbd "C-M-;") 'avy-migemo-goto-char-timer)
  ;;  (global-set-key (kbd "M-g m m") 'avy-migemo-mode)
  )
#+end_src

使い方

  • 現在開いているEmacsのバッファで,C-sとするだけでよい.

  • 下図は,“taiou”,つまり,「対応」を検索しているところである.migemo化する前と同じようにローマ字で日本語が検索できる.

  • 当たり前だが,漢字を入力しても検索できる.

最近開いたディレクトリを開く

  • 参照:OPEN A RECENT DIRECTORY IN DIRED: REVISITED ネタ元

  • ivyを使って最近開いたディレクトリを動的に探索する方法をコード化してくれているので紹介する.

  • 以下のコードをinit.orgに書き込めば良い.

    #+begin_src emacs-lisp
    (defun bjm/ivy-dired-recent-dirs ()
      "Present a list of recently used directories and open the selected one in dired"
      (interactive)
      (let ((recent-dirs
             (delete-dups
              (mapcar (lambda (file)
                        (if (file-directory-p file) file (file-name-directory file)))
                      recentf-list))))
    
        (let ((dir (ivy-read "Directory: "
                             recent-dirs
                             :re-builder #'ivy--regex
                             :sort nil
                             :initial-input nil)))
          (dired dir))))
    
    (global-set-key (kbd "C-x C-d") 'bjm/ivy-dired-recent-dirs)
    #+end_src
    
  • C-x C-dすれば,下図のように,最近開いたディレクトリが表示され,その中から行きたいディレクトリを選んで,リターンすれば良い.

以上,今回は小ネタだが非常に有用なものばかりを紹介した.

Avatar
taipapa
本人ではありません (^^)

Related

Next
Previous
comments powered by Disqus