[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Meadow には非常に多くの検索方法があります.あまりにいろいろあって混乱するほどで す.このページでも,いくつかの章で紹介してますが,散乱していて一覧することはでき ません.
そこで,主なものをまとめてみました.主要なものはこれですべてだと思います.
まぁ,私が作ったのは主要なものではないですが,,,
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
一言で文字の検索といっても非常に多くの方法があります.そこで,ここでは各方法の欠 点,利点を説明します.
検索の方法は大きく分けると 4 つあります.
バッファですので,ファイルなら既に開いているものに限られます.
ファイルなので, Meadow で開いている必要はありません.ただし,編集中の状態は検索で きません.
あらかじめ各ファイルにどんな文字があるかを調べインデックス (索引) を作っておき,検 索時にはそのインデックスを検索するもの.
代表的なのは辞書.その用途のみに特化に,機能強化がされています.
最後のものは特別として,他の 3 つに関しては,ファイル数などで以下のように使い分 けます.
isearch や occur を使う.
を利用する.ただし,ファイル数が少なくても一致箇所があまりに多いと結果が出るまで に時間がかかり,実用には向かない.
インデックス型のもの (namazu) を利用する.検索はインデックスを利用するので,ファ イル数が増えても検索時間は短くて済む.
以下で順に利点などを説明します.
isearch や migemo , occur , moccur といったものが該当します.
バッファを検索しますので,編集中のファイルでも検索できます.また,操作性も軽快で 気軽に実行できます.
しかし,多くのファイルを検索すると時間がかかります.
grep や etags などの外部コマンドを利用するものと dired-do-search や dmoccur などの 外部コマンドを必要としないものがあります.
外部コマンドを利用するものの場合,多くのファイルでも素早く検索することができます. しかし,実用を考えると 100 個を超えると,待ち時間が長くなってしまいます.また, 編集中のファイルは保存しない限り検索することはできません.
外部コマンドを必要としないものは検索する速度が遅いという欠点があります.また,多 くのファイルを検索するのにも適していません.しかし, dired などから検索するファ イルを指定でき,操作性がいいという利点があります.
namazu が代表的なソフトです.
これは,あらかじめインデックスを作っておき,それを検索するという方法です.これに より, 1 万個といった大量のファイルでも一瞬で検索できます.
しかし,インデックスを検索しますので,ファイルを更新したり新規に作成しても,イン デックスが更新されない限り,そのファイルや編集した部分を検索することはできません.
また,検索で分かるのは,以前そのファイルにその文字があったということだけです.ど の行にあったのか,今でもあるのかは分かりません.
代表格は辞書ソフトです.英和辞書や国語辞書などがあります.これは,用途は限られる ものの,その用途に応じた拡張がなされています.
他にはファイル名の検索などもあります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
(regexp) とあるのは正規表現で検索ができることを意味しています. 単に (regexp) で はなく (-regexp) と - がついているのは,正規表現が使える関数と使えない関数がある ということを意味しています.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ここでは, grep や occur , isearch など複数の検索方法を強化する Elisp を紹介し ます. grep や occur にのみ関連する Elisp は個別のページで紹介していますので, 以下の章を探してください.
その他,検索関連の関数なども紹介します.
47.4.1 occur や grep で別ウィンドウに該当行を表示 ― fm (2003/11/11) 47.4.2 曖昧検索 ― levenshtein-distance (2003/11/12) 47.4.3 曖昧検索 ― approx-search (2004/02/16)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
occur や grep の結果バッファでカーソルを移動させるだけで,該当行を別ウィンドウに表 示できます.
grep や occur では検索すると,結果が表示されます.そして,そのバッファでC-c C-c とすることで,該当行へジャンプできます.
しかし,結果を見るために C-c C-c C-x o を繰り返す必要があり,かなり面倒で す.
;;; fm.el --- follow mode for compilation/output buffers
検索の結果でカーソルキーで上下させるだけで,該当行が別ウィンドウに表示されます.
fm.elをロードパスの通ったと ころへ置きます.
以下を.emacs に追加します
(require 'fm) (add-hook 'occur-mode-hook 'fm-start) (add-hook 'compilation-mode-hook 'fm-start) |
occur や grep を行い,結果画面でカーソルを移動させます.それだけで,別ウィンドウに 該当行が表示されます.
表示はfで消すこともできます.
color-occur や color-grep と干渉するかもしれません.使っているのであれば,設定を 外しておいた方がいいでしょう.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
綴りミスなどで, meadow が meaeow になってしまっても meadow で検索するための関数
綴りミスなどのように数文字異なっても検索したい時があります.しかし,普通の関数で はこれを逃してしまいます.
meadow , meaeow , mesdow のような文字をすべて meadow で検索できます.
levenshtein-distance のページ から, levenshtein-distance.el をダウンロードしロードパスの通ったところへ置きます.
以下を.emacs に追加します.
(require 'levenshtein-distance) (setq ld-LD-cache-enable-p t) ;; キャッシュを利用する場合 |
本来は isearch と組み合わせて利用できるようですが,現在の Meadow では利用できません.
ということで,利用できるのは関数のみです,
search-forward の代替として使えます.ただし,必ず文字数は等しくな ければなりません.
曖昧度を設定する. 2 なら 2 文字異なっても検索できます.
levenshtein-distance.el と isearch.el を見れば,編集すべき場所は分かると思うので, 自分で関数を書き換えれば isearch で曖昧検索も利用できます.ただし, migemo とは共用 できません.
また,検索速度はかなり遅いです.文字が長くなると migemo よりも遅い.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
綴りミスなどで, meadow が meaeow になってしまっても meadow で検索するための関数. levenshtein-distance よりも高速な検索が可能.
綴りミスなどのように数文字異なっても検索したい時があります.しかし,普通の関数で はこれを逃してしまいます.
meadow , meaeow , mesdow のような文字をすべて meadow で検索できます.
approx-search.el のページ から, approx-search.el をダウンロードしロードパスの通ったところへ置き ます.
以下を.emacs に追加します.
(require 'approx-search) (if (boundp 'isearch-search-fun-function) (require 'approx-isearch) (require 'approx-old-isearch)) (approx-isearch-set-enable) |
これで, isearch と組み合わせて利用できます.そのため,普通に isearch を行うと,曖 昧検索ができます.
他に以下の関数も利用できます.
search-forward の代替として使えます.
isearch での曖昧検索のオン/オフを切り替える
曖昧検索をオン/オフにする
曖昧度を設定する.
;; 曖昧度 1 (approx-generate-pattern "abcd" 1) ("bcd" "acd" "abd" "abc" "a.cd" "ab.d" "ab.cd") |
のように曖昧度に合わせた正規表現のリストも得られる.
levenshtein-distance よりも高速での検索が可能です.体感速度では migemo よりも速 いんじゃないでしょうか.
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |