[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50. バッファの検索 ― occur (2010/07/24)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=occur"
"MeadowMemo/バッファの検索―occur"へのコメント(無し)
検索全文Elisp


この章で紹介していること

インクリメンタルサーチで現在のバッファを検索することができます.これにより,目的 の場所へ素早く移動することができとても便利です.

しかし,インクリメンタルサーチでは一致箇所を一覧できず,他にどれだけの一致箇所が あるのかは分かりません.

そこで, occur です.M-x occur とすることで,現在のバッファから検索を行い, 検索に一致した行を一覧表示できます.そのため,一致箇所を一目で判断することができ ます.当然,そのバッファでもインクリメンタルサーチができますので,目的の場所へよ り早く移動することができるのです.

また,複数のバッファを対象に検索を行うことができる occur のような機能もあります.

ここでは,この非常に便利な occur やバッファを検索するためのツールを紹介します.

ちなみに,ibuffer にも ibuffer-do-occur という occur が附属しています.それについ ては,ibuffer のところ で紹介していますので,そちらを参照ください.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.1 occurの基本機能 - バッファの検索 (2008/08/13)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=occur%20basic"
"MeadowMemo/occurの基本機能-バッファの検索"へのコメント(無し)
検索全文Elisp

要約

occur は現在のバッファから入力された文字を検索し,その一致箇所を一覧表示します.

何が問題なのか?

isearchでバッファから文字を検索できますが,一覧はできずにどこが一致しているかは 見渡せません.

何ができるのか?

バッファから文字を検索し,その一覧を表示できます.

設定済みMeadowでは

Meadow の標準機能ですので,そのまままで利用できます.

インストール方法

Meadow の標準機能ですので,そのまままで利用できます.設定も不要です.

詳しい使い方

M-x occur として実行します.次に検索する文字を入力します.すると,結果が以 下のように表示されます.

251 matches for "検索" in buffer: *w3m*
      6:50. バッファの検索― occur (2004/10/21)
      9:"MeadowMemo/バッファの検索―occur"へのコメント(無し)
     10:検索[](*)全文()Elisp 検索

このように,occur は現在のバッファから入力した文字を検索し,一覧できるのです.ま た,一致箇所は強調して表示されます.

一覧でのキーバインド

一致箇所の前後も表示

C-u M-x occur とすると,前後数行も含めて表示されます.これにより,どんなと ころが一致したのか分かりやすく便利です.また,C-u 10 M-x occur と指定すると 前後 10 行が表示されます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.2 occur で複数バッファを検索 (2007/12/22)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=multi-occur"
"MeadowMemo/occurで複数バッファを検索"へのコメント(無し)
検索全文Elisp
要約

occur を使った複数バッファ検索機能を紹介します.

何ができるのか?

複数バッファを occur で検索できます.

設定済みMeadowでは

標準機能ですので,そのままで利用できます.

インストール方法

標準機能ですので,インストールや設定は不要です.

詳しい使い方

M-x multi-occur で起動します.すると,ミニバッファに

First buffer to search: (default *Messages*) 

のように表示されます.TAB で補完しながら,検索するバッファを指定します.そ のまま,RET でデフォルト値である現在バッファが検索対象になります.

次に,ミニバッファに

Next buffer to search (RET to end):

と表示されます.そこで,TAB で補完しながら,検索するバッファを指定していき ます.

何も入力せずに,RET を入力すると,バッファの指定が終了になります.

次に,ミニバッファに

List lines matching regexp (default `setq'):

と表示されますので,検索語を入力します.これで,指定したバッファの検索結果がまと めて表示されます.

このようなバッファの指定が面倒な時には,M-x multi-occur-by-filename-regexp が便利です.これを実行すると,ミニバッファに

List lines in buffers whose filename matches regexp:

と表示されます.ここで,例えば,「el」と入力します.次に,ミニバッファに

List lines matching regexp (default `el'):

と表示されますので,検索語を入力します.

すると,ファイル名に「el」を含むバッファを対象に occur による検索が可能になりま す.ただし,ファイルに関連しないバッファは検索対象になりません.また,「auto.+el」 のように正規表現による指定も可能です.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.3 occur のカスタマイズ (2007/12/26)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=occur%20customize"
"MeadowMemo/occurのカスタマイズ"へのコメント(無し)
検索全文Elisp
要約

一致した箇所の文字色や出力結果を常に前後数行表示したりするといった occur のカスタ マイズを紹介します.

一致箇所の文字色を変える

一致した文字のフェイスは,「 list-matching-lines-face 」で定義されていますので, フェイスの変更方法 を参考に自由に変更できます.

 
(setq list-matching-lines-face 'region)

のようにすると,リージョンの色と同じにできます.

常に前後数行を表示

C-u 5 M-x occur としなくても,常に前後 5 行の結果を出力したければ

 
(setq list-matching-lines-default-context-lines 5)

を .emacs に追加します.

50.3.1 occur バッファへ切り替え (2007/12/22)  
50.3.2 カーソル付近の単語で occur (2005/02/18)  
50.3.3 migemo を利用してローマ字のまま occur (2005/02/18)  
50.3.4 occur の結果で keep-line (2005/02/18)  
50.3.5 occur をもっと便利にしたい ― color-occur (2007/12/26)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.3.1 occur バッファへ切り替え (2007/12/22)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=occur%20buffer"
"MeadowMemo/occurバッファへ切り替え"へのコメント(無し)
検索全文Elisp
要約

既に occur による検索結果があれば,それを表示し,無ければ occur による検索を実行 できます.

情報源

Emacs Wikiから.

何が問題なのか?

通常は occur を起動して,結果から該当箇所へジャンプして編集作業を行います.

すると,occur バッファが奥になってしまい,occur バッファへの切り替えが面倒になり ます.

何ができるのか?

最初に起動すると,occur による検索を行います.そして,結果バッファが存在する時に, 再度コマンドを実行すると,そのバッファを表示します.

設定済みMeadowでは

設定していません.

設定方法

以下を .emacs に追加します.

 
(defun my-occur (&optional arg)
  "Switch to *Occur* buffer, or run `occur'.
Without a prefix argument, switch to the buffer.
With a universal prefix argument, run occur again.
With a numeric prefix argument, run occur with NLINES
set to that number."
  (interactive "P")
  (if (and (not arg) (get-buffer "*Occur*"))
      (switch-to-buffer "*Occur*")
    (occur (read-from-minibuffer "Regexp: ")
           (if (listp arg) 0 arg))))

(global-set-key (kbd "<f2>") 'my-occur)

詳しい使い方

M-x my-occur で occur による検索ができます.その後,M-x my-occur とす ると, occur バッファへの切り替えになります.

再度検索したい時には,一度結果バッファを消してから,M-x my-occur とします.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.3.2 カーソル付近の単語で occur (2005/02/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=occur-at-point"
"MeadowMemo/カーソル付近の単語でoccur"へのコメント(無し)
検索全文Elisp
要約

カーソル付近の単語でoccurを実行

情報源

http://pc.2ch.net/test/read.cgi/unix/1001393679/368

何ができるのか?

カーソル付近の単語を用いて occur を実行できます.

設定方法は?

以下を .emacs に追加します.

 
(defun occur-at-point()
  "point のある位置の単語を occur にかける"
  (interactive)
  (if (thing-at-point 'word)
      (occur (thing-at-point 'word))
    (call-interactively 'occur)))

詳しい使い方は?

M-x occur-at-point とします.これで,カーソル付近の単語で occur を実行でき ます.カーソル付近に単語がなければ,通常の occur になります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.3.3 migemo を利用してローマ字のまま occur (2005/02/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=japanease%20occur"
"MeadowMemo/migemoを利用してローマ字のままoccur"へのコメント(無し)
検索全文Elisp
要約

migemoを利用してローマ字のままで occur による日本語検索ができます.

何が問題なのか?

日本語を検索するためには,漢字変換がありとても面倒です.

何ができるのか?

migemo を使うと漢字変換しなくてもローマ字のまま検索することができます ( migemo を参照).これを, occur にも利用すると,ローマ字のままバッファ 内の文字を検索できます.

設定済みMeadowでは

設定していません

設定方法

以下を .emacs に追加します

 
(defvar migemo-occur t)

(defadvice occur
  (around migemo-occur activate)
  (if migemo-occur
      (setq regexp (migemo-get-pattern regexp))
    ())
  ad-do-it)

詳しい使い方

こうしておくと,いちいち漢字変換せずに検索できるので,非常に便利です.全角英数字 が含まれていても気にしなくていいです.

ただし,正規表現は使用できません.

問題点

ただ,これをそのまま適用すると,不都合なこともあります.例えば正規表現を使って occur を呼び出す関数は動きません (texinfo の texinfo-show-structure など) .その ため,挙動が変なものがあれば,

 
(defadvice texinfo-show-structure
  (around deactivate-migemo activate)
  (let ((migemo-occur nil))
    ad-do-it))

のようにして,その関数では無効にしておく必要があります.

個人的な設定

さらに私は

 
(defvar migemo-occur t)
(defadvice occur
  (around migemo-occur activate)
  ;; ime を制御するために, read-from-minibuffer の最終引数を変更
;; ヒストリはカーソルで辿れるので,デフォルトはカーソル付近の単語の方がいい
  (interactive
   (list (let* ((default (if (thing-at-point 'word)
                             (thing-at-point 'word)
                           (car regexp-history)))
                ;;(car regexp-history))
                (input
                 (read-from-minibuffer
                  (if default
                      (format "List lines matching regexp (default `%s'): "
                              default)
                    "List lines matching regexp: ")
                  nil nil nil 'regexp-history default nil)))
           (and (equal input "") default
                (setq input default))
           input)
         current-prefix-arg))
  (if migemo-occur
      (if nlines ;; 引数があれば migemo は使わない
          ()
        (if (< 3 (string-width regexp))
            (setq regexp (migemo-get-pattern regexp))
          ()) ;; 3 文字よりも短かければ migemo は使わない
        ()))
  ;; C-u のデフォルト値は 4 なので, C-u M-x occur とすると
  ;; 前後 4 行も出てしまう
  (if (and
       (listp nlines)
       nlines (= (car nlines) 4))
      (setq nlines list-matching-lines-default-context-lines))
  ad-do-it)

のようにしておいて,C-u M-x occur とすると migemo を使わないようにしてい ます.これなら正規表現も使えます.

さらに, IME を使っていると occur 時に IME の状態がそのまま継承されてしまうので, 上のようにして, occur 時には必ず OFF になるようにしています.さらに, occur の デフォルトをカーソル付近に単語があれば,その単語にしています.

最近では,color-moccur による M-x occur-by-moccur を愛 用しています.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.3.4 occur の結果で keep-line (2005/02/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=occur%20keepline"
"MeadowMemo/occurの結果でkeep-line"へのコメント(無し)
検索全文Elisp
要約

occur の結果で keep-line を行い,結果を絞り込むことができる.

何が問題なのか?

occur はとても便利なのですが,結果が多いと結局全体が見えずによく分かりません.

何ができるのか?

occur の結果で keep-line や flush-lines を行うことができます.

つまり,occur の結果バッファにおいて,入力した文字に一致した行を含む(あるいは含 まない)行だけを削除することができるのです.

設定方法

以下を .emacs に追加します.

 
;;;Occur - Kin Cho <kin@dynarc.com>
(define-key occur-mode-map "F"
  (lambda (str) (interactive "sflush: ")
    (let ((buffer-read-only))
      (save-excursion
        (beginning-of-buffer)
        (forward-line 1)
        (beginning-of-line)
        (flush-lines str)))))
(define-key occur-mode-map "K"
  (lambda (str) (interactive "skeep: ")
    (let ((buffer-read-only))
      (save-excursion
        (beginning-of-buffer)
        (forward-line 1)
        (beginning-of-line)
        (keep-lines str)))))

詳しい使い方

occur の結果で,F とすると,文字の入力を求められます.そこで,入力すると, その文字を含む行が削除されます(flush-lines が実行される).

同様に,K として,文字を入力すると,その文字を含む行だけが残ります (keep-lines が実行される).



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.3.5 occur をもっと便利にしたい ― color-occur (2007/12/26)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=color%20occur"
"MeadowMemo/occurをもっと便利にしたい―color-occur"へのコメント(無し)
検索全文Elisp

要約

occur の結果バッファでカーソルを移動するだけで,別ウィンドウに該当行を表示するこ とができます.

注意事項

バージョンによってはうまく動作しないことがあります.古い Meadow/Emacs では 動作しません

最近は専ら color-moccur を利用しており,こちらの開発はあまりしていません. このため,Meadow/Emacs のバージョンが上がっていくと,動作しなくなってくる可能性も あります

何が問題なのか?

occur は便利な機能ではあるんですが,検索して該当行へのジャンプしかできず,使い勝 手はあまりよくありません.

と書いていたら,最新の Meadow/Emacs ではカーソル移動に連動して別ウィンドウに該当 行を表示する機能が実装されました(50.1 occurの基本機能 - バッファの検索 (2008/08/13) を参照).

何ができるのか?

これを使うと, occur バッファでカーソルを移動すると,別ウィンドウにファイルのバッ ファも移動して該当箇所が分かりやすくなります.

スクリーンショット

下が occur のバッファ.上が,このページを w3m で表示しているところです.上下のバッ ファの同じ行に下線が引かれていることが分かりますか? こんな風に occur バッファとファ イルバッファが連動して表示されるので,前後の内容も分かり使いやすくなります.

インストール方法は?

color-occur.el をダウンロードし, ロードパスの通ったところへ置きます.

設定方法は?

以下を .emacs に追加します.

 
(require 'color-occur)

詳しい使い方は?

普通に M-x occur とすると, 検索に一致した文字に色がつきます.さらに,今カー ソルのある行の該当箇所が別ウィンドウに表示されますので,前後が分かり非常に便利で す.しかも,カーソルを移動するだけで自動的に表示してくれます.

以下,追加したキーバインド

color-occur のカスタマイズ

User Option: color-occur-kill-occur-buffer
デフォルトは nil

この変数が t の時,*Occur* バッファで q で終了すると,*Occur* バッファをキ ルします.

color-occur の更新履歴

個人的には moccur を利用してます

moccur で紹介する color-moccur を使うとすべてのバッファを occur することができます.

この color-moccur は

 
(setq moccur-split-word t)

としてあると,「検索 moccur 」のようにスペースで検索後を区切ると,両方の単語を含 む行のみを一覧できます.

この機能が,普通の文章を検索する時に非常に便利なので, color-moccur の M-x occur-by-moccurM-x occur のかわりに使ってます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.4 検索に一致した行の一括削除 (2005/02/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=flush-lines"
"MeadowMemo/検索に一致した行の一括削除"へのコメント(無し)
検索全文Elisp
要約

カーソル以降である単語を含む (含まない) 行を一気に削除できるコマンド

何が問題なのか?

大きなファイルから関数名だけを抜き出したい.データを整理するためにある数字を含む 行だけを抜き出したい.

このように,膨大な行の中からある文字を含む行(あるいは含まない行)だけに絞り込みた い時があります.

しかし,それをインクリメンタルサーチで検索して,削除してを繰り返していては大変面 倒です.

何ができるのか?

1つのコマンドで簡単に,ある文字を含む行(あるいは含まない行)だけに絞り込むことが できます.

設定済みMeadowでは

Meadow/Emacs の標準機能なので,そのままで利用できます.

詳しい使い方

バッファ編集コマンドとして,M-x flush-linesM-x keep-lines というも のがあります.

M-x flush-lines とすると,カーソル位置以降で検索に一致した文字を含む行を削 除することができます.

逆に,M-x keep-lines とすると,検索に一致した行だけが残り,それ以外の行が 削除されます.

例えば M-x flush-lines ^$ とすると,空行の削除ができるため,便利です.ただ し,カーソル以降が対象なので,バッファ全体の空行を消したければ,M-< として から利用する必要があります.

カスタマイズ

通常はカーソル移行が対象になりますが,常にバッファ全体を対象にしたければ

 
(defadvice flush-lines
  (before beginning-of-buffer-before-flush-lines activate)
  (beginning-of-buffer))
(defadvice keep-lines
  (before beginning-of-buffer-before-keep-lines activate)
  (beginning-of-buffer))

と設定しておきます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5 すべてのバッファ/ファイルに occur / grep を ― color-moccur (2010/07/24)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=color-moccur"
"MeadowMemo/すべてのバッファ/ファイルにoccur/grepを―color-moccur"へのコメント(無し)
検索全文Elisp

要約

すべてのバッファを対象に occur を実施できる.また,lisp だけで grep や grep-find と同等の機能を実現できる.

何が問題なのか?

このページは章毎にファイルを分けて書いています.今では,ファイルが 60 個以上もあ ります.そのため,「確かこれはどこかに書いたはず」と思っても探し出すのはかなり面 倒です.もはや微かな記憶だけを頼りにしていては,探し出すことができません.

そこで, color-moccur を使って全バッファを検索してしまえば,どこにあるかがすぐに 分かります.

最早これがないとこのページを編集できません (-_-;)

何ができるのか?

color-moccur のデモ を作ってみました.

moccur という Elisp があります.これ は,すべてのバッファを対象に occur をするものです.しかし,普通の occur であるた め,非常に使いにくいものです.

そこで, moccur を改造した color-moccur が便利です.これなら, moccur 同様すべて のバッファを対象に occur ができるだけでなく,使い勝手も非常にいいものになっていま す.

私が moccur をもとにして改造したものなので,バグってるかもしれませんが...しか も、手前味噌だし...

color-moccur の売り

個人的に愛用している理由は以下です.ただし,デフォルトの状態で以下がすべて使える とは限りません.

color-moccur と moccur の違いは?

color-moccur は moccur に比べて以下の点で優れています.

似たようなものとして, multi-occur があります.これは, Meadow/Emacs に標準で付属している replace.el に入っています (古いものには入ってい ません).これは, moccur とほぼ同じ機能を持ちますが,検索するバッファ名をいちいち 指定する必要があり,使い勝手は moccur にさえ劣ります(私見ですが...).

自分で言うのも何ですが, color-moccur は moccur よりもずっと使い勝手がいいです.

それでは,以降でインストールや設定を紹介していきます.

50.5.1 moccur のインストールと使い方 (2007/12/17)  
50.5.2 color-moccur のインストール (2007/12/18)  
50.5.3 color-moccur の基本機能 (2007/12/22)  
50.5.4 moccur の拡張機能とカスタマイズ (2010/05/06)  
50.5.5 color-moccur を他の Elisp と組み合わせる (2003/12/16)  
50.5.6 color-moccur の更新履歴 (2010/07/24)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.1 moccur のインストールと使い方 (2007/12/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=moccur%20install"
"MeadowMemo/moccurのインストールと使い方"へのコメント(無し)
検索全文Elisp
要約

複数バッファを検索できる moccur のインストールと使い方

設定済みMeadowでは

設定済み Meadow には moccur を元にした,color-moccur が入っています.

インストール方法

moccur を http://www.google.com/search?q=moccur より探すか, moccur.el からダウンロードします.

設定方法

.emacs に以下を追加します.

 
(load "moccur")

詳しい使い方

実行は M-x moccur とします.すると,ミニバッファに

List lines matching regexp:

と表示されますので,検索語を入力します.すると,結果が表示されます.そして,適当 な候補で C-c C-c とすると,該当行へ飛ぶことができます.

例えばこんな風になります.

Lines matching setq
Buffer: color-moccur.el<mylisp> File: d:/home/mylisp/color-moccur.el

 87 ;; a few descriptive words like "setq gnus" hit the 'enter' key.
124 ;; (setq dmoccur-list
162 ;; (setq *moccur-buffer-name-exclusion-list*
165 ;; (setq moccur-split-word t)
166 ;; (setq dmoccur-use-list t)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.2 color-moccur のインストール (2007/12/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=color-moccur%20install"
"MeadowMemo/color-moccurのインストール"へのコメント(2007/12/28)
検索全文Elisp

要約

color-moccur のインストール方法です.

設定済みMeadowでは

インストールと設定済みですので,何もしなくても使用できます.

インストール方法

color-moccur.el をダウンロード して,ロードパスの通ったところへ置きます.

設定方法

以下を .emacs に追加します.

 
(require 'color-moccur)

使用できるコマンド一覧

color-moccur では以下のコマンドを実行できます.

それでは,順番に説明していきます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.3 color-moccur の基本機能 (2007/12/22)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=basic%20color-moccur"
"MeadowMemo/color-moccurの基本機能"へのコメント(無し)
検索全文Elisp

color-moccurで実行できる検索機能などの基本的な機能を紹介します.

50.5.3.1 color-moccur によるバッファ検索 (2007/12/22)  
50.5.3.2 dmoccur によるディレクトリ下検索 (2007/12/19)  
50.5.3.3 dmoccur で指定ディレクトリを検索  
50.5.3.4 color-moccur で occur を代替 (2007/12/18)  
50.5.3.5 isearch の単語で occur を実行 (2007/12/18)  
50.5.3.6 バッファリストや dired から moccur を実行  
50.5.3.7 color-moccur の結果バッファでの機能 (2007/12/18)  
50.5.3.8 color-moccur で実行できる他の機能 (2007/12/18)  
50.5.3.9 grep(-find) の代替コマンド ― moccur-grep(-find) (2007/12/18)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.3.1 color-moccur によるバッファ検索 (2007/12/22)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=use%20color-moccur"
"MeadowMemo/color-moccurによるバッファ検索"へのコメント(無し)
検索全文Elisp
要約

color-moccur による検索の基本的な使い方

詳しい使い方

起動方法は moccur と同じで,M-x moccur とします.そうすると

Lines matching defcustom
Buffer: smiley.el<t-gnus> File: e:/unix/Meadow2/1.99a6/site-lisp/t-gnus/smiley.el

 47 (defcustom smiley-data-directory (nnheader-find-etc-directory "smilies")
 53 (defcustom smiley-regexp-alist
132 (defcustom gnus-smiley-file-types

Buffer: sieve-mode.el<t-gnus> File: e:/unix/Meadow2/1.99a6/site-lisp/t-gnus/sieve-mode.el

 61 (defcustom sieve-mode-hook nil

という風にファイルバッファを対象に検索結果が表示されます (基本的な画面は moccur と同じです) .

このバッファで カーソルを移動させると,別ウィンドウにはバッファの該当行が表示され ます.

ただし,M-x moccur で検索されるバッファはファイルに関連したバッファのみとな ります.このため,*scratch* バッファなどは検索されません.すべてのバッファを対象 にしたい時には C-u M-x moccur として検索を行います.

moccur のキーバインド

M-x moccur で検索した結果で使用できるキーバインドです.

いろいろありますが,細かいことは覚えなくても,上下のカーソルキーでカーソル移動, q で終了,RET で該当行へジャンプぐらいで十分利用できます.

一応,全キーバインドを挙げておきます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.3.2 dmoccur によるディレクトリ下検索 (2007/12/19)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dmoccur"
"MeadowMemo/dmoccurによるディレクトリ下検索"へのコメント(無し)
検索全文Elisp
要約

指定したディレクトリを対象に moccur を実行する.

何が問題なのか?

M-x moccur で既に開いているファイルを対象に検索を実行できます.

しかし,

何ができるのか?

使い方は簡単で,dmoccur とします.すると,ディレクトリを尋ねられますので, 入力します.すると,指定したディレクトリ下のファイルを開き,検索してくれます.

さらに,C-u M-x dmoccur とすると,あらかじめ指定しておいたディレクトリのファ イルを検索することができます.このお気に入りにメモなどのディレクトリを設定してお くと,検索するディレクトリの指定を簡単にすることができます (設定方法は 50.5.3.3 dmoccur で指定ディレクトリを検索) .

しかし,これを使用すると,バッファが氾濫してしまいます.そこで,必要に応じて M-x clean-dmoccur-buffers とすると,不要なバッファを簡単に kill できます.

dmoccur は結局は occur なので,ファイルを必ずすべて開きます.また,開くファイルの 拡張子などは固定です.そのため, grep に慣れていると,ちょっと使いにくいかもしれ ません.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.3.3 dmoccur で指定ディレクトリを検索

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dmoccur%20favorites"
"MeadowMemo/dmoccurで指定ディレクトリを検索"へのコメント(無し)
検索全文Elisp
要約

あらかじめ指定しておいたディレクトリのファイルを簡単に検索できます.

何が問題なのか?

よく検索するディレクトリは決まってるのに,毎回ディレクトリを指定するのは面倒なも のです.

何ができるのか?

あらかじめ指定しておいたディレクトリのファイルを簡単に検索できるようになります.

設定方法

使うためには変数 dmoccur-list を設定する必要があります.

User Option: dmoccur-list
デフォルトは

 
  '(
    ("dir" "~/" (".*") dir)
    )

例えば

 
(setq dmoccur-list
      '(
        ("dir" default-directory (".*") dir)
        ("soft" "~/www/soft/" ("\\.texi$") nil)
        ("config" "~/mylisp/"  ("\\.js" "\\.el$") nil)
        ("1.99" "e:/unix/Meadow2/1.99a6/" (".*") sub)

        ("node" "~/www/soft/" ("\\.texi$") nil
         (nil t) "\\(@cha\\|@sec\\)")

        ("old-node" "~/www/soft/" ("\\.texi$") nil
         (nil nil) meadowmemo-search-old-node-name)

        ("test" default-directory (".*") dir nil "set")
        ))

のように指定します.指定する必須項目は順番に「名前 デフォルトのディレクトリ 検索 するファイル オプション」になります.さらに,その後に 2 つ設定できる項目がありま すが,これはなくても構いません.

カスタマイズでも設定できます.

dmoccur-list の設定項目を順番に説明していきます.

詳しい使い方

C-u M-x dmoccur(dmoccur-use-list が t なら M-x dmoccur) として実行し ます.

すると,ミニバッファに

dmoccur name (default mlisp) : 

と表示されますので,ここで指定した名前を入力します.続いて,設定によってディレク トリの指定や検索語の指定となりますので,順番に入力します.

これで,検索が実行できます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.3.4 color-moccur で occur を代替 (2007/12/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=occur%20color-moccur"
"MeadowMemo/color-moccurでoccurを代替"へのコメント(無し)
検索全文Elisp

M-x occur-by-moccur とします.これで occur と同様,現在のバッファのみを対 象に検索できます.

color-moccur なら該当する行が自動的に表示されますし,他の機能も利用できます.

ちょっと拡張された occur としていかがでしょうか.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.3.5 isearch の単語で occur を実行 (2007/12/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=isearch%20color-moccur"
"MeadowMemo/isearchの単語でoccurを実行"へのコメント(無し)
検索全文Elisp

C-s で検索中に,M-o とします.これで,現在検索中の単語で occur-by-moccur を実行できます.

検索語を入力し直す必要がなく,便利です.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.3.6 バッファリストや dired から moccur を実行

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=buflist%20color-moccur"
"MeadowMemo/バッファリストやdiredからmoccurを実行"へのコメント(無し)
検索全文Elisp

バッファリストからの moccur

M-x moccur では,開いているバッファが多いと時間がかかってしまいます.

そこで,C-x C-b でバッファリストを出し,m で検索したいバッファに印を つけます.その後,M-x Buffer-menu-moccur とすると,印をつけたバッファのみ を対象に occur を行うことができます.

これなら,検索対象を絞ることができ,検索も短時間で済みます.

dired からの moccur

dmoccur でディレクトリ以下のファイルを検索できますが,ファイルが多いディレクトリ ではファイルを開くのに時間がかかります.

そこで, dired で指定したファイルのみを検索する dired-do-moccur が便利です.

まず,C-x d で dired を表示し,検索したいファイルに m でマークをつけ ます.そして,M-x dired-do-moccur を実行します.

すると,マークをつけたファイルのみを moccur で検索できます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.3.7 color-moccur の結果バッファでの機能 (2007/12/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=color-moccur%20buffer"
"MeadowMemo/color-moccurの結果バッファでの機能"へのコメント(無し)
検索全文Elisp

moccur の結果が表示されたバッファで s とします.これで,検索に一致したバッ ファだけを対象に moccur を実行できます.

また,moccur の結果が表示されたバッファで u とすると,一つ前の条件で moccur を実行できます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.3.8 color-moccur で実行できる他の機能 (2007/12/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=misc%20color-moccur"
"MeadowMemo/color-moccurで実行できる他の機能"へのコメント(無し)
検索全文Elisp

M-x grep-buffers で開いているファイルに対して grep を実行できます.

M-x search-buffers とするとバッファの全文検索ができます.スペースで区切って 検索すると,そのすべての単語があったバッファの一覧が表示されます. google には遠 く及びませんが,あんな風に簡単な要約も出ます.

例えばこんな風に...

 
Search interactive
Buffer: color-moccur.el File: d:/akihisa/mylisp/plisp/color-moccur.el
 within `current-buffer'."
  (interactive)
  (let ((case-fold-search is ... 


Buffer: pukiwiki-mode.el File: d:/akihisa/mylisp/plisp/pukiwiki-mode.el
n pukiwiki-mode-version ()
  (interactive)
  (message (format "pukiwiki ... 

この結果バッファで RET とすると,そのバッファに対して occur-by-moccur を実 行します.

つまり,指定した単語が含まれるバッファを絞りこみ,そのバッファに対してさらにその 単語で検索ができるわけです.

M-x search-buffers でファイルのバッファ,C-u M-x search-buffers です べてのバッファが対象です.この機能は半分はお遊びなので,実用性は求めないように.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.3.9 grep(-find) の代替コマンド ― moccur-grep(-find) (2007/12/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=moccur-grep"
"MeadowMemo/grep(-find)の代替コマンド―moccur-grep(-find)"へのコメント(無し)
検索全文Elisp
要約

moccur を grep の代替として使うことで Cygwin が無い環境でも grep や grep-find を 利用できます.もちろん,日本語も検索できます.

何が問題なのか?

Cygwin を入れれば,様々な grep コマンドを便利に利用できます.しかし, Cygwin を入れ ることができない場合もあります.そんな場合に moccur-grep を使えば, grep の代替と して利用できます.

また,ファイル名が日本語でも Emacs で開くことのできるファイルであれば,問題なく検 索できます.

何ができるのか?

grep や grep-find と同じようなことができます.

つまり,ファイルを対象に検索を実行できます (find-file でファイルを開かないので, バッファは作成しません).find-file でファイルを開くことをしないので,dmoccur より もはやく検索できますし,バッファが氾濫することもありません.

また,サブディレクトリのファイルまで検索させることもできます.

詳しい使い方

M-x moccur-grep とすると起動できます.そうすると,ミニバッファに

Directory: d:/home/

と表示されます.ここで,ディレクトリを指定します.次にミニバッファに

Input Regexp and FileMask:

と表示されます.ここでは,正規表現とファイルマスクを入力します.例えば

Input Regexp and FileMask: [0-9]+ .

のように入力します.

スペース区切りで,一番最後に書いた正規表現をファイルマスクと認識します.この場合 であれば,「.」の正規表現に一致する文字を含むファイル(つまりすべてのファイル)を対 象に,[0-9]+ という正規表現で検索するということになります.

普通の grep と違い,ファイルマスクが普通の正規表現であることに注意してください.

特にファイルマスクを指定しなければ,全ファイルが対象になります.

例えば

Input Regexp and FileMask: [0-9]+ el$

とすると,ファイル名が el で終わるファイルのみが検索対象になります.

同じように,M-x moccur-grep-find でサブディレクトリのファイルも対象に含めて 検索を実行できます.

ファイルが多くて時間がかかる時には C-g で途中で中断できます.中断時点での 結果も表示されますので,それを参考に絞り込むといいでしょう.

コメント

検索には moccur で用いている関数をそのまま利用しています。

そのため、後で紹介する拡張機能による検索も利用できます.例えば,migemo による検索 (moccur-use-migemo) やスペース区切りの単語による検索(moccur-split-word) なども可 能です。

もちろん,Meadow/Emacs が認識できる文字コードであれば,どんな文字コードのファイ ルであっても検索できます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.4 moccur の拡張機能とカスタマイズ (2010/05/06)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=color-moccur%20custom"
"MeadowMemo/moccurの拡張機能とカスタマイズ"へのコメント(無し)
検索全文Elisp

さて,基本的な機能は紹介しましたので,次は拡張機能やカスタマイズについて紹介しま しょう.

50.5.4.1 moccur のカスタマイズ例 (2007/12/18)  
50.5.4.2 moccur のカスタマイズ項目 (2010/05/06)  
50.5.4.3 コメントだけを検索 (2007/12/19)  
50.5.4.4 dmoccur をカスタマイズ (2007/12/19)  
50.5.4.5 moccur-grep をカスタマイズ (2010/05/06)  
50.5.4.6 その他のカスタマイズ (2005/02/18)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.4.1 moccur のカスタマイズ例 (2007/12/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=exampleelisp%20color-moccur"
"MeadowMemo/moccurのカスタマイズ例"へのコメント(無し)
検索全文Elisp

設定済み Meadow では以下のような設定で使っています. とりあえず一例ということで.

 
(setq moccur-split-word t)
(setq moccur-use-migemo t)
(setq color-moccur-default-ime-status nil)
(autoload 'moccur-grep "color-moccur" nil t)
(autoload 'moccur-grep-find "color-moccur" nil t)
(autoload 'isearch-moccur "color-moccur" nil t)
(autoload 'isearch-moccur-all "color-moccur" nil t)
(autoload 'occur-by-moccur "color-moccur" nil t)
(autoload 'moccur "color-moccur" nil t)
(autoload 'dmoccur "color-moccur" nil t)
(autoload 'dired-do-moccur "color-moccur" nil t)
(autoload 'Buffer-menu-moccur "color-moccur" nil t)
(autoload 'moccur-narrow-down "color-moccur" nil t)
(autoload 'grep-buffers "color-moccur" nil t)
(autoload 'search-buffers "color-moccur" nil t)
(autoload 'gresreg "gresreg" nil t)
(eval-after-load "color-moccur"
  '(require 'moccur-edit))
(eval-after-load "ibuffer"
  '(require 'color-moccur))
(setq *moccur-buffer-name-exclusion-list*
      '(".+TAGS.+" "*Completions*" "*Messages*"
        "newsrc.eld"
        " *migemo*" ".bbdb"))

(add-hook 'dired-mode-hook
          '(lambda ()
             (local-set-key "O" 'dired-do-moccur)))
(define-key Buffer-menu-mode-map "O" 'Buffer-menu-moccur)
;;(global-set-key "\M-f" 'grep-buffers)
(global-set-key "\M-o" 'occur-by-moccur)
(global-set-key "\C-c\C-x\C-o" 'moccur)
;;(global-set-key "\C-c\C-o" 'search-buffers)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.4.2 moccur のカスタマイズ項目 (2010/05/06)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=defcus%20color-moccur"
"MeadowMemo/moccurのカスタマイズ項目"へのコメント(無し)
検索全文Elisp

設定できる項目を以下で説明します.

User Option: moccur-following-mode-toggle
通常はmoccurの結果でカーソルを移動すると,別ウィンドウに該当行を表示します.この 動作がうっとうしい場合には,この変数をnilにすることで,無効化できます.

User Option: moccur-kill-moccur-buffer
通常はmoccurの結果で qで終了すると,その結果のバッファをキルしません.後ろ の方へ移動するだけで,結果バッファは残ってるわけです.でも,この変数が t だとバッ ファを消します.

ただし, moccur での検索を行った場合には以前の結果バッファはこの変数の値に関わらず 消えます.

User Option: *moccur-buffer-name-exclusion-list*
常に検索対象としないバッファを指定できます.正規表現で指定します.

ただし,完全一致でなければなりません.このため,"el"を指定しても駄目です. ".+el"のように指定する必要があります.

User Option: *moccur-buffer-name-inclusion-list*
検索対象とするバッファを指定できます.

デフォルトは「 '("[^ ].*")」となってます.つまりスペースで始まるバッファは検索し ないようになってます.

User Option: moccur-use-migemo
デフォルトは nil

t にすると migemo を利用して検索ができます.Meadow で migemo が利用できるようになっ ていれば,例えば「 setumei 」で「説明」を検索できるようになります.

ただし,「.+ 」のような正規表現があると,そのまま正規表現として認識します.この ため,「 setumei. 」のように「句読点」を含む場合, migemo は使われません.

User Option: moccur-split-word
デフォルトは nil

t にすると,複数の検索語を指定できます.

例えば,

(defun news-agent (status)
(news-agent 'online)

という文があって,「 agent 」で検索すると,両方とも引っかかります.これが,今まで の検索方法です.

この方法では, defun の方だけを検索しようとすると,「 defun.+agent 」などと正規表 現を用いる必要があります.これは非常に面倒ですし,普通の文章のように,どちらの単 語が先に来るか分からないような場合には検索できません.

例えば,「news-agent の前に defun がありますね.このようにすることで関数を定義し ているのです」という文章は「 defun.+agent 」では検索できません.

しかし, moccur-split-word が t なら「 defun agent 」という風にスペースで区切るだ けで,「 defun 」と「 agent 」の両方がある行を検索できます.この例なら, 「 (defun news-agent (status) 」だけが一致します.

確か,関数でこんな文字を含んでいたはずなんだけど,,,といった曖昧な記憶を頼りに 検索する時に非常に役立ちます(もちろん正規表現でやってもいいですが,,,).

ついでに,これが t になっていると,「 b:バッファ名」で検索するバッファを絞り込む ことができます.例えば,「 b:gnus 」とするとバッファ名に「 gnus 」を含むバッファ のみが検索対象になります(詳しくは50.5.4.3 コメントだけを検索 (2007/12/19)で紹介します).

ちなみに,単語をスペースで区切る時に,正規表現として正しいか確認を行っています. このため「 [a-z ]+ 」のようにスペースを含む正規表現でも正しく検索できます.ただし, 正規表現中にスペースが 2 個以上連続しても 1 個とみなされますので注意ください.

User Option: color-moccur-default-ime-status
デフォルトは t

nil だと,検索する時にミニバッファへカーソルが移動した時に, IME をオフにする.t なら,何もしない.

migemo を使うのであれば, IME を使う必要はないので, nil にすると便利です.

User Option: moccur-use-ee
デフォルトは nil

t だと,検索結果をeeを使って表示できる.

これにより,

+ Buffer: admini.texi<soft> File: d:/akihisa/www/soft/admini.texi
- Buffer: basic_know.texi<soft> File: d:/akihisa/www/soft/basic_know.texi
    53 ミニバッファはファイルを開く時,文字を検索する時などにユーザの入力を
   184 C-s:文字列を下方向に検索する (ただし日本語を検索するには工夫が必要).
   187 C-r:文字列を上方向に検索する (ただし日本語を検索するには工夫が必要).
+ Buffer: buf-list.texi<soft> File: d:/akihisa/www/soft/buf-list.texi

のように不要な部分を閉じて表示できる.ただし,検索結果が多い場合には, ee を使う と激遅になります.

また, allout を使っていると, moccur-use-ee を t にしても表示は変わりません. allout は outline の関数を書き換えてしまうため,動作不良になるためです.

User Option: moccur-maximum-displayed-with-color

デフォルトは 500 .

moccur の結果バッファには色が付きます.この色は moccur-maximum-displayed-with-color で設定した数に達すると,それ以降は色がつかな くなります.つまり,デフォルトであれば,色がつくのは 500 箇所までです.

検索結果が多い場合に,無制限に色付けを行うと遅くなるため,ある程度で制限しておく のがお勧めです.

nil で無制限になります.お勧めはしませんけど....

User Option: moccur-kill-buffer-after-goto

デフォルトは t .

moccur の結果バッファで RET で飛ぶと結果バッファ(*moccur*バッファ)を kill します. nil なら,kill せずに残したままにします.

User Option: moccur-use-keyword

デフォルトは nil .

t ならキーワードによる検索を行うことができる.例えば,「 url 」で 「 http://www.bookshelf.jp/soft/meadow.html 」に一致などが可能になる.

User Option: moccur-search-keyword-alist

moccur-use-keyword が t の時に展開するリスト.

例えば,url で http で始まる URL らしき文字を検索するなどが,あらかじめ指定して おくことで,その都度正規表現を考えなくても検索できるようになります.

デフォルトは

 
(defcustom moccur-search-keyword-alist
  '(("url"  . "[fht]*ttp://[-_.!~*'() a-zA-Z0-9;/?:@&=+$,%#]+")
    ("mail" . "[^][<>@ \n]+@[-_.!~*'() a-zA-Z0-9?@&=+$,%#]+"))
  "*Alist of KEYWORD and REGEXP."

キーワードと正規表現とのリスト.デフォルトは url と mail でそれぞれ URL ,メール アドレスに一致させることができる.

User Option: kill-buffer-after-dired-do-moccur
デフォルトは nil

t なら,dired から moccur を起動して,moccur の結果バッファを終了した時,開いた バッファを閉じます.

User Option: moccur-buffer-sort-method
moccur の結果でどのバッファが最初にくるかの並び順を制御できます.デフォルトの関 数は「moccur-filepath-string<」です.

並び順を変えたい時はこの関数を参考に関数を作って指定してください.

User Option: moccur-special-word-list
50.5.4.3 コメントだけを検索 (2007/12/19) で説明します.

User Option: moccur-use-xdoc2txt
xdoc2txt による展開を使うかどうかを指定します.デフォルトは「nil」です.

xdoc2txt がインストールされていて,この変数が t なら Word などのファイルも moccur-grep(-find) で検索できます.

User Option: moccur-grep-xdoc2txt-maximum-size
xdoc2txt を使って検索するファイルの最大サイズです.単位は kBです.

User Option: moccur-grep-xdoc2txt-exts
xdoc2txt を使って検索するファイルの拡張子です.

User Option: moccur-grep-following-mode-toggle
デフォルトは t

moccur-grep(-find) で検索した時に該当するバッファを別ウィンドウに表示するかどう かを制御できます.nil なら表示しません.

User Option: moccur-grep-default-word-near-point
デフォルトは nil

t であれば,カーソル付近の単語をデフォルトの検索語とします.

50.5.4.3 コメントだけを検索 (2007/12/19)  
50.5.4.4 dmoccur をカスタマイズ (2007/12/19)  
50.5.4.5 moccur-grep をカスタマイズ (2010/05/06)  
50.5.4.6 その他のカスタマイズ (2005/02/18)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.4.3 コメントだけを検索 (2007/12/19)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=color-moccur%20split"
"MeadowMemo/コメントだけを検索"へのコメント(無し)
検索全文Elisp
要約

コメントや関数名だけを検索することで絞り込むことができます.

何が問題なのか?

color-moccur は多くのバッファを検索します.そのため,どうしても一致箇所が多くなり, そこから一致して欲しかった部分を探すのが面倒になります.

例えば,コメントだけを探したい時には,コメント以外の部分を読み飛ばさなくてはなり ません.

何ができるのか?

color-moccur では

 
(setq moccur-split-word t)

の設定があれば,複数の検索語を指定できます.

この時 1 番目の検索語に特別な意味を持たせることができます.

例えば,「; setq 」で検索すると,その部分がコメントどうかを確認させることができる のです.

設定方法

以下を .emacs に追加します.

 
(setq moccur-split-word t)

詳しい使い方

普通に moccur や dmoccur を利用するだけです.

その時,検索語の 1 語目に「"」「! 」「;」を指定すると,それぞれ,「文字列」「関数 名」「コメント」のみを対象に検索できます.

条件を追加したい

条件を追加するためには, Emacs lisp の知識が必要です.

まず, moccur の検索と条件の確認は以下のような順序で実行されます.

このように確認しています.したがって,設定すべき項目は

になります.デフォルトでは以下のように設定されています.

 
(defvar moccur-special-word-list '(
                                   (";"
                                    moccur-face-initialization
                                    moccur-comment-check)
                                   ("\""
                                    moccur-face-initialization
                                    moccur-string-check)
                                   ("!"
                                    moccur-face-initialization
                                    moccur-function-check)))

設定項目は順に「特別な語」「初期化関数」「確認用関数」になっています.

関数さえ用意すれば,自由に条件を追加することができます.

うまく動かない

適当に確認しているだけなので,

    (if (get-buffer "*Search*")  ; there ought to be just one of these

のような行を「; buffer search one 」で検索すると,この行に一致します.しかし,「; buffer one search 」で検索すると一致しません.

つまり,一番最後の検索語がコメントかどうかしか確認していないのです.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.4.4 dmoccur をカスタマイズ (2007/12/19)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dmoccur%20custom"
"MeadowMemo/dmoccurをカスタマイズ"へのコメント(無し)
検索全文Elisp

M-x dmoccur に関連したカスタマイズを紹介します.

ちなみに私は以下のような設定で使っています.

 
(setq dmoccur-use-list t)
(setq dmoccur-list
      '(
        ("dir" default-directory (".*") dir)
        ("soft" "~/www/soft/" ("\\.texi$") nil)
        ("config" "~/mylisp/"  ("\\.js" "\\.el$") nil)
        ("1.99" "d:/unix/Meadow2/1.99a6/" (".*") sub)
        ))

設定できるオプションを詳しく説明します.

User Option: dmoccur-mask
デフォルトは (".*") .

M-x dmoccur 時に開くファイルを正規表現で指定します.

例えば,

 
(setq dmoccur-mask '("\\.el$" "\\.cpp$"))

と指定すると,拡張子が「 el 」と「 cpp 」のファイルのみ検索します.

User Option: dmoccur-maximum-size
デフォルトは nil (ファイルサイズでは制限しない) . 100 なら 100kB 以下のファイルの みを検索する.

M-x dmoccur 時に開くファイルサイズを指定します.

dmoccur-maximum-size で指定されたファイルサイズより小さいファイルだけが開かれま す.単位は kB です.

大きなファイルを開くのには時間がかかりますから,適当な値にしておくといいでしょう.

User Option: dmoccur-exclusion-mask

M-x dmoccur 時に開かないファイルを正規表現で指定する.

画像ファイルやバイナリファイルなど検索する必要のないファイルを正規表現で指定して おきます.

User Option: dmoccur-recursive-search

t なら M-x dmoccur 時にディレクトリ下を再帰的に検索する (サブディレクトリの ファイルも検索する) .お気に入りでも再帰的な検索になるので,ファイルの開きすぎに 注意してください.

デフォルトは nil

User Option: dmoccur-use-list
デフォルトは nil

t なら,C-u M-x dmoccur としなくても,M-x dmoccur でお気に入りから検 索できます.

User Option: dmoccur-use-project
デフォルトは nil

dmoccur で検索すると,現在のバッファが最近どのお気に入りで検索されたかが記録され ます.

nil なら dmoccur で検索するお気に入りを常に指定できます.

t なら, dmoccur でお気に入りの名前を聞かずに,検索時に保存されたお気に入りで検索 します.連続して, dmoccur で検索する時に煩わしい入力がなくなり,いきなり検索文字 を入力できるので便利です.ただし,他のお気に入りを選ぶことはできませんので,他の お気に入りを選びたい時には適当にバッファを変える必要があります.

@subsubsubsection dmoccur のディレクトリ指定 (2005/02/18)

何が問題なのか?

dmoccur のカスイタマイズ で基本的な設定方法は紹介しました.

しかし,

といったこともあります.

color-moccur ではこういったこともできます.ただし,それだけ設定は増えるので,少し 複雑になります.

設定方法

dmoccur のカスタマイズ の説明では

 
(setq dmoccur-list
      '(
        ("soft" "~/www/soft/" ("\\.texi$") nil)))

のように指定すると説明しました.この「"~/www/soft/"」の部分を

 
(setq dmoccur-list
      '(
        ("soft"
         (
          ("~/www/soft/" t ("gnus.texi"))
          ("~/mylisp/" nil ("elisp.texi"))
          )
         ("\\.texi$") nil)))

のように変えます.このように複数のディレクトリを指定することができるのです.

 
("~/www/soft/" t ("gnus.texi"))

の指定項目は順に

 
検索するディレクトリ 再帰検索するか (t ならする) 検索しないファイルのリスト

になります. 2 番目以降はオプションで無ければ nil になります.したがって,単に複 数のディレクトリを設定したいだけであれば,

 
(setq dmoccur-list
      '(
        ("soft"
         (
          ("~/www/soft/")
          ("~/mylisp/")
          )
         ("\\.texi$") nil)))

のように指定できます.

以下,参考にサンプルです.

 
 (setq dmoccur-list
       '(
         ;; 再帰的に検索する場合は、このように設定する
         ;; オプションが dir や sub なら 1 個しか指定できない
         ("dir-recursive" ((default-directory t)) (".*") dir)
         
         ;; オプションが nil なら、何個でもディレクトリを指定できる
         ("test" (("~/mylisp")
                  ("~/user"))
          (".*") nil)

         ;; 再帰的に検索するかどうかも指定できる
         ("test-recursive"
          (("~/mylisp" t) ;; このディレクトリは再帰的に検索
           ("~/user"))
          (".*") nil)

         ;; 
         ("ignore-txt"
          ;; mylisp 下は再帰的に検索する
          ;; ただし,拡張子が txt のファイルは検索したくない
          (("~/mylisp" t (".+.txt"))
          ;; user 下は再帰的に検索しない
           ("~/user"))
          (".*") nil)
         ))



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.4.5 moccur-grep をカスタマイズ (2010/05/06)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=customize%20moccur-grep"
"MeadowMemo/moccur-grepをカスタマイズ"へのコメント(無し)
検索全文Elisp
要約

moccur-grepに関連したカスタマイズを紹介しています.

情報源

パッチをいただきました.ありがとうございます.

設定方法

以下のように設定します.これにより,M-x moccur-grep を実行するだけで,カー ソル付近の単語をデフォルトに追加したり,マスクを自動記入したりできます.

 
;; カーソル付近の単語をデフォルトの検索文字列とする
(setq moccur-grep-default-word-near-point t)

;; *.c 編集中のデフォルトファイルマスク: \.[HhCc]$
(add-hook
 'c-mode-common-hook
 '(lambda ()
    (setq moccur-grep-default-mask "\\.\[HhCc\]$")))

デフォルトでは,カーソル移動だけで,該当箇所を別ウィンドウに表示しますが,以下を 設定することで無効化することができます.

 
(setq moccur-grep-following-mode-toggle nil)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.4.6 その他のカスタマイズ (2005/02/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=color-moccur%20misc"
"MeadowMemo/その他のカスタマイズ"へのコメント(無し)
検索全文Elisp

dired から moccur をカスタマイズ

User Option: kill-buffer-after-dired-do-moccur

デフォルトは nil .

t なら, dired から moccur で検索し, moccur を q で抜けると,開いたファイ ルをすべて kill します.ただし,元から存在していたバッファは消しません.

これにより,バッファが氾濫することを防ぐことができます.

この機能はフォームから投稿していただきました.ありがとうございました.

キーバインドの追加

お好きなようにどうぞ.

私はこんな風にしてます.

 
(define-key dired-mode-map "O" 'dired-do-moccur)
(define-key Buffer-menu-mode-map "O" 'Buffer-menu-moccur)
(global-set-key "\C-c\C-x\C-o" 'moccur)
(global-set-key "\C-c\C-o" 'search-buffers)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.5 color-moccur を他の Elisp と組み合わせる (2003/12/16)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=mymoccur"
"MeadowMemo/color-moccurを他のElispと組み合わせる"へのコメント(無し)
検索全文Elisp

color-moccur を使っていると,いろいろな場面で color-moccur が使いたいなという時 があります.ここでは,自分好みの moccur を作る方法を簡単に紹介します.

moccur にしても dmoccur にしても検索は moccur-search という関数で行なっています. どのバッファを検索するかを指定する方法が違うだけです.

例えば occur と同等のことをするのであれば,

 
(defun my-occur (regexp arg)
  ;; moccur-regexp-read-from-minibuf は moccur で使っている
  ;; 文字を受け取る関数
  (interactive (list (moccur-regexp-read-from-minibuf)
                     current-prefix-arg))

  ;; おまじない
  (moccur-setup)

  (let ((buffers (list (current-buffer))))
    (moccur-search regexp t buffers)
    ;; 引数は正規表現 全バッファ バッファのリスト
    ;; 全バッファとは全バッファを検索するかどうかです
    ;; nil ならファイルバッファのみになります
    ))

とするだけでできます.複数のバッファを検索したければ, buffers にそのバッファのリ ストを指定すればいいのです.

例えば, navi2ch で mo でマークのついたスレを検索したいなら,以下のようにし てできます.

 
(defun navi2ch-bm-display-mark-moccur (regexp arg)
  (interactive (list (moccur-regexp-read-from-minibuf)
                     current-prefix-arg))
  (let ((navi2ch-article-max-buffers 10000) (buffers nil)
        (navi2ch-offline t))
    (setq buffers (navi2ch-article-buffer-list))
    (while buffers
      (if (buffer-live-p (car buffers))
          (kill-buffer (car buffers)))
      (setq buffers (cdr buffers)))
    (navi2ch-bm-exec-subr 'navi2ch-bm-display-article)
    (setq buffers (navi2ch-article-buffer-list))

    (moccur-setup)

    (moccur-search regexp t buffers)
    ))

(add-hook
 'navi2ch-article-load-hook
 (lambda ()
   (define-key navi2ch-bm-mode-map
     "mo" 'navi2ch-bm-display-mark-moccur)))

同じようにすると,バッファの検索を行う Elisp を簡単に実現できます.

50.5.5.1 namazu と moccur を組み合わせる (2003/11/27)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.5.1 namazu と moccur を組み合わせる (2003/11/27)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=namazu%20moccur"
"MeadowMemo/namazuとmoccurを組み合わせる"へのコメント(無し)
検索全文Elisp
要約

namazu で検索語に一致しそうなファイルを絞り, moccur で実際に検索して結果を表示 できます.

何が問題なのか?

moccur はあまり大量の文書を検索するのには向いていません.それは検索するために, ファイルを開く必要があるからです.

一方で, namazu は大量の文書を検索するのに向いていますが, 1 個 1 個の検索結果の 表示は要約が出るだけで,便利とはいえません.

何ができるのか?

namazu で検索し,一致したファイルに対して moccur を行うことができます.

必要なもの

namazu.el と color-moccur.el が動作することが必要です.

設定方法

以下を.emacs に追加します.

 
(defun nmoccur (&optional page-num namazu-dir key)
  "namazu + moccur"
  (interactive
   (list
    0
    (if (or (and (not namazu-always-query-index-directory)
                 current-prefix-arg)
	    (and namazu-always-query-index-directory
                 (not current-prefix-arg)))
	(read-from-minibuffer
         "Namazu index directory: " nil
         namazu-minibuffer-map nil 'namazu-index-history)
      nil)
    (read-from-minibuffer
     "Enter Keyword: " nil
     namazu-minibuffer-field-map nil 'namazu-keyword-history)))
  (setq namazu-filename-list nil)
  (let ((dir
         (or
          namazu-dir
          (progn
            (or
             namazu-default-dir
             (setq namazu-default-dir (namazu-get-default-index-dir)))
            (expand-file-name namazu-default-dir))))
	(arg-list (list "-all" key)))
    (if (and dir (not (string= dir "")) (string-match "[^ \t]" dir))
	(setq arg-list
              (append
               arg-list
               (namazu-split-dir (namazu-expand-dir-alias dir)))))
    (message "Namazu running ...")
      (let ((default-process-coding-system
              (cons namazu-cs-read namazu-cs-write))
            (process-input-coding-system namazu-cs-read)
            (process-output-coding-system namazu-cs-write)
            (coding-system-for-read namazu-cs-read)
            (coding-system-for-write namazu-cs-write))
        (with-temp-buffer
          (apply (function call-process)
                 namazu-command nil t nil arg-list)
          (goto-char (point-min))
          (setq namazu-filename-list
                (split-string
                 (buffer-substring-no-properties
                  (point-min) (point-max)) "\n")))))
  
    (message "done!")
    (setq namazu-filename-list
          (mapcar
           '(lambda (file)
              (if (string-match "^/\\([a-zA-Z]\\)|/\\(.+\\)$" file)
                  (concat (match-string 1 file)
                          ":/" (match-string 2 file))
                file))
           namazu-filename-list))

    (if (> (length namazu-filename-list) namazu-search-num)
        (setq namazu-filename-list
              (reverse
               (nthcdr
                (- (length namazu-filename-list) namazu-search-num)
                (reverse namazu-filename-list)))))

    (moccur-setup)
    (setq moccur-last-command 'dired-do-moccur)
    (let ((buffers
           (moccur-add-files-to-search-list
            namazu-filename-list "~/" t nil))
          (moccur-split-word t)
          (regexp key))
      (while (string-match " " regexp nil)
        (setq regexp (replace-match "\\\\|" nil nil regexp)))

      (moccur-search regexp nil buffers)
      (when kill-buffer-after-dired-do-moccur
        (while buffers
          (setq buff (car buffers))
          (if (memq buff moccur-match-buffers)
              ()
            (if (memq buff moccur-buffers-before-moccur)
                (delq buff buffers)
              (kill-buffer buff)))
          (setq buffers (cdr buffers))))))

詳しい使い方

M-x nmoccur で検索できます.そうすると, namazu で検索した後で, moccur に より個々のファイルを検索してくれます.ファイルを多く開きますが, kill-buffer-after-dired-do-moccur が t であれば, moccur を q で終了した時 に,すべてのバッファを閉じます.

ただし,検索するファイル数は namazu-search-num で設定した数になります.

うまく動かない

検索語はスペースで区切って入れてください. and や or などには対応していません.

コメント

思いつきで作ったもの.実用性はあまりないかも.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.5.6 color-moccur の更新履歴 (2010/07/24)

検索全文Elisp

もう少し詳しい経緯は Wiki にあります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.6 すべてのバッファを検索し,編集したい ― moccur-edit (2008/07/29)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=edit%20moccur"
"MeadowMemo/すべてのバッファを検索し,編集したい―moccur-edit"へのコメント(2007/12/28)
検索全文Elisp
要約

color-moccur の検索結果をそのまま編集することで,多数のファイルを簡単に置換した りできる.

デモ

moccuredit のデモ を作ってみました.参考にどうぞ.

何が問題なのか?

スクリプトの#!/usr/bin/perl など,編集中のファイルの中のある文字を置換したい場合 どうしてますか?

1 個や 2 個であれば手でもできますが,たくさんのファイルになると 1 個 1 個,手で置 換するのは非常に面倒です. color-moccur を使えば,一覧を出すことができるのでちょっ とは楽ですが,バッファの切換えを何度もする必要があり,やはり面倒です.

何ができるのか?

color-moccur を前に紹介 しました.これを使って検索すると,

Lines matching defcustom
Buffer: sieve-mode.el<t-gnus> File: e:/Meadow2/1.99a6/site-lisp/t-gnus/sieve-mode.el

 61 (defcustom sieve-mode-hook nil

という風に検索結果を表示してくれます.

ここまで表示してくれるんだったら, color-moccur のバッファを直接編集してしまった 方が見通しがいいと思いませんか?

これを可能にするものが, moccur-edit です.

これを使えば,検索して,結果画面で M-% を使い,一気に置換することができます. 置換だけでなく,結果バッファを編集し,その変更をファイルに適用することもできます.

インストール方法は?

当然ですが, color-moccur がないと動きませんので,先に入れておいてください.

その後で,moccur-edit.el をダ ウンロードし,ロードパスの通ったところへ置きます.

設定方法は?

以下を.emacs に追加します.

 
(load "moccur-edit")

詳しい使い方は?

まず普通に, moccur をし,一覧を表示します.

そして,以下のように操作します.

moccur-edit のカスタマイズ

User Option: moccur-edit-highlight-edited-text
デフォルトは nil

t なら,各バッファで変更が適用された行に色がつけられます.

User Option: moccur-edit-remove-overlays
デフォルトは nil

デフォルトでは,moccur-edit-highlight-edited-text が t の時には,変更を適用した後 で,*moccur*バッファを q で抜けても各バッファで変更された箇所には色が残りま す,変更箇所を確認しやすくするためです.

これが邪魔な時には,この変数を t にします.すると,*moccur*バッファを q で 抜けた時に色を消します.

M-x moccur-edit-remove-overlays でも消すことができます.

User Option: moccur-query-when-buffer-read-only
デフォルトは t .読み込み専用のバッファだと,そのままでは変更を適用できません. デフォルトでは,確認してから,読み込み専用の設定を外して変更を適用します. nil な ら,変更が適用されません.

User Option: moccur-edit-remove-overlays-after-save-buffer
デフォルトは t.保存時に変更箇所の色を消します.

moccur-edit の更新履歴



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.7 occur のように検索して編集 ― all (2003/12/03)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=all"
"MeadowMemo/occurのように検索して編集―all"へのコメント(無し)
検索全文Elisp

何ができるのか?

XEDIT というテキストエディタには all というコマンドがあります.

これは, occur のように検索をして,その検索結果バッファをファイルのように編集で きるコマンドです.

ファイルの行数が長い場合などに,必要な行のみを表示して編集できるので,見通しがい いのです.

このような操作を Meadow で実現するのが all.el です.

インストール方法は?

all.el をダウンロードし,ロードパスの 通ったところへ置きます.

設定方法は?

.emacs に以下を追加します.

 
(autoload 'all "all" nil t)

詳しい使い方は?

M-x allとすればカレントバッファを検索し,一致した文字が含まれている行のみ が別バッファに表示されます.後は,そのままそのバッファを編集すれば,その変更が即 座にファイルに適用されます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

50.8 インクリメンタルに検索できる occur (2010/03/11)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=ioccur"
"MeadowMemo/インクリメンタルに検索できるoccur"へのコメント(無し)
検索全文Elisp

要約

検索する文字を入力するたびに更新される occur.

情報源

gnu-emacs-sourcesから.

何が問題なのか?

occur は便利なのですが,ある単語を検索しても思いの外,多くの行が一致してしまうこ とがあります.

何ができるのか?

例えば,「def」で検索すると,Emacs-lisp ならたくさん一致することでしょう.そんな 時に,すぐに「un」と入力すれば,即座に「defun」での検索結果に変化します.

設定済みMeadowでは

入ってません.

インストール方法

http://mercurial.intuxication.org/hg/ioccur からダウンロードしてロードパ スの通ったところへ置きます.

設定方法

以下を .emacs に追加します.

 
;; This buffer is for notes you don't want to save, and for Lisp evaluation.
;; If you want to create a file, visit that file with C-x C-f,
;; then enter the text in that file's own buffer.

(when (and (boundp 'emacs-major-version)
         (< emacs-major-version 23))
    (defmacro characterp (form) (list (quote numberp) form))
    (require 'ioccur))

詳しい使い方

M-x ioccur として起動します.後は,入力すれば,自動的に結果が更新されます.


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]