1

このコマンドを使用してemacsを起動します

$ emacs -Q c-mode-test.el

次に、 C-xC-e を使用してすべての行を評価します

(require 'cc-mode)

(add-hook 'c-mode-common-hook '(lambda () (print "hello")))

(add-hook 'c-mode-hook '(lambda () (print "hello c")))

(c-mode)

この後、ミニバッファーが表示されます

"hello"

"hello c"

"hello c"
nil

および c++-mode-hook はまったく同じように実行されます

(add-hook 'c++-mode-hook '(lambda () (print "hello c++")))

(c++-mode)

ミニバッファ

"hello"

"hello c++"

"hello c++"
nil

なぜそれが2回実行されるのか、何か間違っています。

4

3 に答える 3

3

「C」ファイルに間違ったフックを使用しています。使用する正しいフックは「c-mode-hook」です。

フック「c-mode-common-hook」は、すべての C スタイル言語の前に実行されます。つまり、フックは Java、objective-c、awk などの多くの言語で実行されます。これらのフックの詳細については、こちらを参照してください。

于 2015-08-24T14:22:16.183 に答える
0

言語固有のフックが複数回実行されているようです。(run-hooks c-mode-hook)またはを実行することでこれが当てはまることを確認でき、ステートメントが1回だけ発生(run-hooks c-mode-common-hook)することに気付くでしょう。print

フックに関する一般的なアドバイスは、フックが実行される順序に依存しないことです。フックが実行される回数に依存しないことは、そこでの自然な拡張のように見えます。

于 2012-08-11T05:12:29.517 に答える