search

Org-rifle

学会続きで,久方ぶりの更新である.org fileの中を検索する際に,Swiper, ivy, avy, migemoによるEmacsの検索強化で取り上げた swiper を,もっぱら使用しているのだが,そうすると,ファイル内のどこにいるのかが分からなくなることがある.検索ファイルのパスなどがorg fileの中で分かる検索ソフトはないものかと探したところ,このorg-rifleが見つかった.

Deadgrep

次世代grepで最速と言われるripgrepをバックエンドとするEmacs用検索ツールであるdeadgrepをインストールしてみた. Table of Contents Ref Install How to use 2019年6月2日追記 Ref deadgrep: use ripgrep from Emacs ご本家 複雑になった時使うツール とても勉強になるサイト,こちらを読めば本サイトは読まなくても良いような... Install まず,バックエンドのripgrepをインストールする.brewを使えば簡単である. $ brew install ripgrep ついで,以下のようにinit.orgに書き込んでMRLPAからdeadgrep.elをインストールする.f5にキーバインドしておく. #+begin_src emacs-lisp (use-package deadgrep :ensure t :config (global-set-key (kbd "<f5>") #'deadgrep) ) #+end_src How to use 使用方法の詳細はご本家に書いてあるが,f5を叩いて,検索キーワードを入れるだけである.下の画像は,このブログのあるdirectoryで,「検索」をキーワードとしてdeadgrepを走らせたところである.defaultでdirectory内を再帰的に検索する.キーワードは青くハイライトされており,左端の数字はその文書での行番号である. o を叩くと下のバッファに該当箇所にカーソルがある状態でその文書が開く. C-c C-k で検索を止めることができる.また,swiperとの併用も可能である. 一番上のSearch termの行のchangeにカーソルを持っていってReturnすると,Minibufferで検索語を変更できる.その下にあるSearch type, Case, Context, Directory, Filesも同様に条件を変更できる.とくに,Directoryは適切なものを選ばないと巨大なデータを検索することになってしまうので注意が必要である.

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

文章を書いている際に,ある単語を検索したくなるようなことがよくある.Emacsでのデフォルトはisearchであるが,今回は,これを強化するpackageを紹介する.また,最近開いたディレクトリ directory をまた開きたいこともよくあることである.これについてもivyによる検索が便利であるので紹介する.例によってネタ元を見たほうが早いかもしれない...(^^;;; Table of Contents swiper.el Install & setup 使い方 migemo cmigemoのinstall migemo.elのInstall & setup avy-migemo(swiperのmigemo対応) Install & setup 使い方 最近開いたディレクトリを開く swiper.el 参照1:swiper ご本家 参照2:swiper.el: 一覧付き正規表現isearch!C-sを置き換えろ 参照3:Emacsの補完&検索を超強化する Emacsでは,C-sに割り当てられたisearchによる正規表現検索がデフォルトで存在する.これをivyを用いて一覧を付加するようにした強化版である. 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のコメントアウトしている部分については後述する.