(epoj)Resolving relation of identifiers


Next: Resolving file reference Prev: Resolving Relations Up: Resolving Relations


識別子の定義/参照間ジャンプ
===========================

ひとつめの関係解決は識別子の定義/参照間ジャンプです。どこかで定義している
識別子を参照する部分に居る場合、その場から定義箇所にすぐに飛ぶことができま
す。もっと砕いて言うと、関数やラベルの参照を行なっている箇所で

`[prefix] C-r'
             ... ポイント位置の関係の解決 (epor-resolve-relation)

を押すとその定義箇所にジャンプします。定義箇所の検索は、原則として同一ディ
レクトリツリーに属するファイル全てから行なわれます。

また、定義箇所へのジャンプとは逆に、定義箇所で `[prefix] C-r' を押すことに
より、その参照箇所へジャンプします。参照箇所は複数あるのであまり便利である
とはいえませんが、続けて `M-n'や`M-p'を押すことにより、その次の箇所での参
照部分を(バッファを跨いで)検索します。

どちら方向のジャンプでも、`C-x j 3'(デフォルト)を押すと最初にいた位置に戻
れます。

また、もし参照部分で `[prefix] C-r' を押して定義箇所を探す場合、可能性のあ
る場所でその定義箇所が見付からない場合は今すぐその定義を作成するか聞いて来
ます。yと答えると定義を自動作成します。これだけでは分かりづらいので例をあ
げましょう。たとえばEmacs-Lispで、ある部分を関数化したくなったとします。

     (defun foo ()
        (interactive)
        (save-excursion
           ほげほげ〜
           えへへへ〜
           ;;次の部分を関数化したい
           うりゃあ〜
           どりゃ〜
            :
           ))

そのようなときは、新しい関数を定義する前に、関数の参照をバッファに書いてし
まいます。

     (defun foo ()
        (interactive)
        (save-excursion
           ほげほげ〜
           えへへへ〜
           ;;次の部分を関数化したい
           (sub-of-foo x y)
           うりゃあ〜
           どりゃ〜
            :
           ))

しかるのちに sub-of-foo にカーソルを合わせて(相手がいなくても) `[prefix]
C-r' をタイプします。すると

     No partner found.  Create function-definition now? (y or n)

と聞かれるので、yを押すと

     Type [prefix] C-y to insert function-definition template of sub-of-foo

と表示され、テンプレートが記憶されます。この状態で後続する「うりゃあ〜ど
りゃ〜」を `C-k' などで削除して kill-ring に取り込みます。続いて、新しい関
数 `sub-of-foo' を定義したい場所に移動してから、

`[prefix] C-y'
             ... 識別子定義テンプレート挿入 (epo-yank-structure)

をタイプすると

     (defun sub-of-foo ()
      ""
     )

という関数定義の基本形が現れるので、その内部に先ほど取り込んだ「うりゃ〜ど
りゃ〜」をyankして関数定義は完了します。

プログラミングの設計が終わり、具体的なコーディングをしている段階では、関数
というものは定義が先に生まれるのではなく、参照したいという必要が先に生まれ
てから定義が生まれることが多いので epor-resolve-relation を効果的に利用す
るとよいでしょう。これは、LaTeXにおけるlabel定義でも同様のことがいえます。



automatically generated by info2www.cgi version 1.2