6

私はCEDETでEmacsを使用しており、コード補完のためにオートコンプリートを使用しています。もともと私はCEDETをセットアップしたので、Emacsが起動するたびにロードされます。

ただし、これにはかなりの時間がかかったので、必要に応じて、つまり、私の場合はC++モードに入るときにロードするのが賢明だと思いました。

そこで、元の関数をlambdaC++モードに入るときに呼び出されるに移動しました。

; cscope for c(++) programming (finding symbols, etc.)
(require 'xcscope)

; C++ stuff
(add-hook 'c++-mode-hook
      (lambda ()
        (load-file "/usr/share/emacs/site-lisp/cedet-common/cedet.el")
        (global-ede-mode 1) ; enable project management system
        (semantic-load-enable-code-helpers) ; enable prototype help and smart completion
        (require 'auto-complete-config)
        (add-to-list 'ac-dictionary-directories "~/elisp/ac-dict")
        (add-to-list 'ac-sources 'ac-source-semantic)
        (local-set-key (kbd "C-:") 'semantic-ia-complete-symbol-menu) ; set shortcut for auto completion.
        (local-set-key (kbd "C-.") 'ac-complete-semantic)
        (ac-config-default)
        )
      )

エラーはありませんが、次の問題があります。Emacsが初めてC ++モードに入ると、コードの完了が正しく機能しません。しかし、Emacsが2回目にC ++モードに入ると、すべてが正常に機能します。

誰かが私が間違っていることを知っていますか?

4

1 に答える 1

8

CEDET初期化は、独自のCおよびC++モードフックを設定します。同じフックを実行しているときにフックをインストールすると、実行されず、最初のバッファーが初期化されません。

起動時にCEDETをロードしますが、Cモードフックでコードヘルパーを初期化します。そうすれば、C ++モードはmode-localで初期化されますが、フックの実行後に追加の関数がインストールされるため、機能する可能性があります。私はそれを自分で試していませんでした。

EDEモードは遅くないと思いますので、初期化時にも大丈夫でしょう。

于 2010-06-20T13:32:58.450 に答える