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でほぼ事足りているのだが,大きなプロジェクト内の複数のファイルを一気に検索する必要がある人には非常に有益なツールだと思う. 2019年6月2日追記 上記のように自分にはあまり役に立たないようなことを書いたが,早速,deadgrepが役に立ったので追記しておく.hyperestraierで全文検索をしようとして,H@estfxpdftohtml というコマンドを使おうとしたのだが,うまくいかず,その原因を探るために,/usr/local/で,H@estfxpdftohtmlをSearch termとして,deadgrepを下の画像のように走らせてみたところ,下側のバッファにあるように,一発で原因が判明してしまった.要するに,xpdfが必要ということであった.なるほど,こういう風に使うのかと納得した. なお,全文検索については,いずれ別の機会にまとめてみたい.

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のコメントアウトしている部分については後述する. 使い方 現在開いているEmacsのバッファで,C-sとするだけでよい.