2

https://stackoverflow.com/a/663636/391104

(defun my-c++-mode-hook ()
  (setq c-basic-offset 4)
  (c-set-offset 'substatement-open 0))
(add-hook 'c++-mode-hook 'my-c++-mode-hook)

私の調査によると、上記のコードを .emacs に追加するだけで、魔法のように機能します。

Q1> とはdefun my-c++-mode-hook ()どういう意味ですか? Lispの関数定義?

Q2> 次の行の使い方は何ですか? どこでトリガーすればよいか、またはemacsによって自動的に実行されます

(add-hook 'c++-mode-hook 'my-c++-mode-hook)

ありがとうございました

4

1 に答える 1

5

Q1: はい、これは関数定義です (したがってdefun)。2 番目の記号は名前で、フックとして使用することを意図していることを人間に示すために、接尾辞「-hook」が付いています。動作を変更することなく、(ほぼ) 任意の名前を付けることができます。空()は、関数が引数を取らないことを示します。それ以外はすべて関数の本体です。

Q2: 基本的に、これにより、c++-mode起動時に呼び出される関数のリストに前の関数へのポインターが追加されます。モードを開始するたびに、Emacs はモード フックを探し、その中のすべての関数を実行します。関数定義と add-hook 行の両方を .emacs に入れる必要があり、それらは emacs を起動すると自動的に実行されます。

elisp に頭を包むには、導入を強くお勧めします。これは emacs に同梱されており、情報システムからアクセスできます: C-h i、次に Elisp Introduction を探します。

于 2012-04-18T16:41:22.697 に答える