動的束縛は、プログラムがローカルなテキストスコープ内で定義されていない変数を参照できるため、強力な機能です。しかし、むやみに使用すると、プログラムの理解を困難にする可能性もあります。
まず、名前の衝突を避けるため、変数名を指定してください(Emacs Lisp コーディング規約を参照)。
defvar
形式で特殊変数として宣言し、すでにバインドされていない限り決して代入しないでください。これにより、バインドされていない状態で変数を参照しようとすると、void-variable エラーが発生します。
defvar、defconst(グローバル変数の定義を参照)、またはdefcustom(カスタマイズ変数の定義を参照)を用いて変数を定義してください。通常、定義はEmacs
Lispファイルのトップレベルに記述します。可能な限り、変数の意味や目的を説明するドキュメント文字列を含めるようにしてください。
これにより、どのような影響が出るかを確実に把握した上で、プログラム内のどこででも変数をバインドできるようになります。その変数が登場する箇所であればどこでも、例えば C-h v コマンドなどを通じて(変数の定義が Emacs に読み込まれていれば)、定義を簡単に参照できます。The GNU Emacs Manual の Name Help を参照してください。
例えば、case-fold-searchのようなカスタマイズ可能な変数には、ローカルバインディングを使用するのが一般的です:
(defun search-for-abc ()
"Search for the string \"abc\", ignoring case differences."
(let ((case-fold-search t))
(re-search-forward "abc")))