Next: Moving by Defuns, Up: Defuns [Contents][Index]
プログラミング言語のモードの多くは、デフォルトでは左端で見つかった開始区切りは、トップレベル定義、またはdefunの開始とみなします。したがって、そのような意味をもたない場合、開始区切りを左端に配してはいけません。たとえば、それがトップレベルのリストの開始でない場合は、Lispファイルの左端に開きカッコを記述しないでください。
この慣習に従わない場合、コードの構文を解析するために、バッファーの先頭から再スキャンが必要ですが、慣習に従うことにより、多くのEmacs操作をスピードアップできます。
この慣習にしたがわない場合、defunにより動作するコマンドを明示的に使用する場合にトラブルが起こるだけではありません。これを使用する他の機能もトラブルを起こすでしょう。これにはインデントコマンド(Program Indentを参照してください)と、Font Lockモード(Font Lockを参照してください)が含まれます。
同様な問題ケースのほとんどは、文字列リテラルで開始区切りを行の先頭に記述したい場合です。このトラブルを避けるには、開始区切りの前にエスケープ文字(CおよびEmacs Lispでは‘\’、その他のLisp方言のいくつかは‘/’)を配します。これは文字列の内容には影響を与えませんが、その開始区切りがdefunの開始となるのを防ぎます。以下は例です:
(insert "Foo: \(bar) ")
この慣習を破ったことに気づくには、Font Lockモードが助けになります。Font Lockモードは混乱して、(クォートする必要がある)開始区切りを赤の太字でハイライトするからです。
この慣習をオーバーライドする必要がある場合、変数open-paren-in-column-0-is-defun-start
をセッティングすることにより、これを行うことができます。このユーザーオプションがt
(デフォルト)にセットされている場合、列0の開きカッコまたは大カッコ(braces)は常にdefunの開始となります。nil
の場合、defunは最外レベルのカッコまたは大カッコを検索することにより発見されます。
通常は、このオプションをデフォルト値のt
にしておくべきです。バッファーの列0にdefunの開始でないカッコまたは大カッコが含まれていて、これらのカッコまたは大カッコを削除するのが何らかの理由で現実的でない場合、このオプションをnil
にするのが役に立つかもしれません。しかしこれは大きなバッファーのスクロールや、表示の速度を著しく低下させるかもしれないことを知っておいてください。さらに、正しく機能させるために、バッファー全体を通じてカッコまたは大カッコが、正しく対応が取れていなければなりません。