回答:
一部の人はそれを使用する方が簡単だと思うかもしれませんsetq。一部の人々は、それがよりすっきりしていると思うかもしれません。実際には、一般的なケースでは単純です。
一部のユーザーオプションでは問題にならないのは事実です。しかし、他の人にとっては、それは重要でありsetq、それらのオプションの間違ったアプローチです。だから、一般的なルールとしてsetq、間違ったアプローチです。
を使用する場合、custom-set-variablesまたはのcustomize-set-variable代わりにsetq、またはユーザーインターフェイスのカスタマイズ(例:)を使用する場合M-x customize-option、オプション値に必要な意図された初期化または更新コードが自動的にトリガーされ、必要に応じて実行されます。を使用する場合setq、これは行われません。
現在、ほとんどのユーザーオプション、特にサードパーティライブラリ用に作成された多くのオプションは、defcustomキーワード:setおよび:initializeを使用setqせず、使用は重要ではありません。しかし、多くのバニラEmacsオプションはそのようなキーワードを使用しますが、使用するものについてはsetq正しいことではありません。したがって、オプションの設定にUIのカスタマイズではなくLispコードを使用する場合はcustom-set-variables、のcustomize-set-variable代わりにまたはを使用することをお勧めしますsetq。それは決して痛いことはなく、時には(多くの)助けになります。
しかし、私がお勧めするのは、これらの両方を行うことです。
このためにLispコードを記述する代わりに、カスタマイズUIを使用します。
変数を定義しcustom-fileて、Customizeが初期化ファイルではなくそのファイルにカスタマイズを書き込むようにします(~/.emacs)。IOW、カスタマイズによって書かれた自動コードとは別に、手書きの初期化コードを保管してください。
:typewithのようなものを使用できることさえ望んでdefvarいます-ユーザーオプションに限定されるべきではないと思います。残念ながら、多くのプログラマーはの使用に怠け者で:typeあり、結果はあまり役に立ちません(カスタマイズのせいではありません)。
私が好むsetq以上customize、いくつかの理由のために:
(setq foo (calculate-foo)))。構成を常にドライにしておくために、このパワーを使用しています。私にとって、Emacsを使用する最大のポイントはプログラマビリティであり、customizeインターフェイスは邪魔をするだけです。setqバージョン管理とコード編成に適しています。初期化を数十のファイルに分割しました。すべてが1つの巨大なcustom.elファイルにある場合、設定をすばやく見つけて編集することははるかに困難です。customizeインターフェイス全体が90年代の最悪のUIの恐ろしい遺物のように感じます。私はいつでもEmacsの力でテキストを編集することを好みます。@Drewはとでの微妙な点についていくつかの良い点を指摘し:setてい:initializeます。私は何年もEmacsを使用してきましたが、そのような問題に遭遇することはほとんどありませんでした。私が行うと、それがスワップアウトするのは簡単だsetqためにcustom-set-variable、特定のケースで。
customize-set-variable(s)、プログラムでカスタマイズ変数を設定できます。これらの変数は自動的に実行されるため、より適切です。2.さまざまなカスタマイズコマンドを使用して、異なる階層のすべてのセット変数や保存済み変数を表示できるため、バージョン管理で個別のファイルを使用することなく、異なるグループを自動的に編成できます。3.ずっと良くなった。UIが気に入らない場合でも、プログラムを使用してカスタマイズを使用し、カスタマイズモードを回避する対話型コマンドを使用して、カスタマイズを使用する他のすべての利点を得ることができます。
setq代わりに使用する利点の1つcustomizeは、読みやすさです。IMOが読みやすさを向上させるために、各カスタマイズに自由に注釈を付けることができます。関連するカスタマイズをグループ化して、モジュール性を向上させることもできます。最後に、elispバッファーをナビゲートする方が、カスタマイズUIとウィジェットをナビゲートするよりも「簡単」だと主張します。
一方、カスタマイズを使用すると、デフォルト値に簡単に戻すことができます。
編集:ドリューの答えは、customize-set-variables私が指摘したすべての利点を提供することができる使用する大きな理由を提供します。ただし、カスタマイズUIは、未加工のelispほど簡単に異なるプラットフォーム間で移植可能な構成に適していません。OSに依存する設定を持つ変数が必要な場合、多くの場合、elispにフォールバックする必要があります。elispバッファーでのナビゲーションが簡単であるという私の主張は今でも変わりません。
setqコメントアウトしてsetqemacsを再起動するだけです。
custom-set-variables である「生のelispは」、と私は複数のマシン上で毎日それを使用しています。カスタマイズが書き込む場所からコピーするだけです(自分で書いていない場合)。
もう1つの方法は、John Wiegleyのuse-packageを使用することです。これにより、emacs 24+パッケージ初期化プロセスでうまく機能するパッケージをプログラムで構成できます。readmeの使用例を次に示します。
(use-package color-moccur
:commands (isearch-moccur isearch-all)
:bind (("M-s O" . moccur)
:map isearch-mode-map
("M-o" . isearch-moccur)
("M-O" . isearch-moccur-all))
:custom (isearch-lazy-highlight t)
:config (use-package moccur-edit))
ポイントは、use packageはマクロであり、その引数をすぐには評価しないことです。:initそして:configパラメータは、それが可能な一箇所に各パッケージの構成を有しているが、各部分は初期の適切な段階で実行させるなって、初期化プロセスの異なる段階で評価されます。
use-package一部のパッケージのようなものがないと、初期化コードの(package-initialize)一部を前に、別の部分を後にする必要があります。そのようなpackegasが多数ある場合、theire初期化をインターリーブする必要があります。
別の利点use-packageは、.emacsを新しいマシンに持って行ったり、設定を他のユーザーと共有したり、パッケージを実際にロードする必要があるまですべての初期化を延期したりすると、package.elを使用して不足しているパッケージを自動的にインストールできることです。
初期化プロセスをより詳細に制御できる追加のキーワード引数もあります。
とは言っても、カスタマイズの大きな利点の1つは、特定のパッケージに構成する内容が表示されることです。それが、私が今でも多くのパッケージで使用している理由の1つです。
use-packageモジュール化された構成の利点はもちろん、パッケージを1か所にインポートして構成することにも利点があると思います。しかし、はい、例ではを使用していsetqます。customize-set-variableここでも使用できたでしょうか?よく分かりません。交換できますか(またはcustomize-set-value)交換できsetqますか?
:customキーワードを使用するように例を変更してください。