3

.htmlなどの混合タイプのプログラミング言語を含むファイルの場合、セマンティックはコードの分析に問題があります。これらのタイプのファイルのセマンティックによる自動分析を具体的に無効にする方法はありますか?

私はEmacs24に付属している組み込みのセデットを使用しています:

CEDET Version:  1.0
            Requested   File        Loaded
  Package       Version     Version     Version
  ----------------------------------------------------------
  cedet:        1.0     nil     ok
  eieio:        1.3     nil     ok
  semantic:     2.0     nil     ok
  srecode:      1.0     nil     ok
  ede:          1.0     nil     ok
  speedbar:     1.0     nil     ok
4

3 に答える 3

2

を使用しsemantic-inhibit-functionsます。たとえば、これは次のとおりです。

(setq semantic-inhibit-functions
      (list (lambda () (not (and (featurep 'cc-defs)
                                 c-buffer-is-cc-mode)))))

cc-modeすべての非バッファでセマンティックを無効にする必要があります。

于 2012-12-30T21:42:53.753 に答える
2

別の例として、特定のモードで無効にするには:

(add-to-list 'semantic-inhibit-functions
             (lambda () (member major-mode '(html-mode))))
于 2013-12-03T01:51:12.280 に答える
2

セマンティックドキュメントから:

2.3.1特定のバッファを解析しない

Semantic-inhibit-functions変数を使用して解析を禁止できます。

—変数:semantic-inhibit-functionsセマンティックがバッファーを設定する前に引数なしで呼び出す関数のリスト。これらの関数のいずれかがnil以外を返す場合、現在のバッファーはセマンティックを使用するように設定されていません。

これにより、非常に大きなファイル、またはセマンティックに特定の問題を引き起こすファイルの解析が禁止される可能性があります。

適切な使用例:

  ;; Disable Semantic's source referencing in lisp buffers.
  (add-hook 'semantic-inhibit-functions
            (lambda () (member major-mode '(emacs-lisp-mode))))

これにより、(リストを上書きする代わりに)リストに追加され、セマンティックがロードされた後にのみ実行されるようになります。

with-eval-after-loadユーザー構成の初期化時にセマンティックパッケージがロードされない可能性があるため、を使用する必要があります。その場合、semantic-inhibit-functions変数が存在しないというエラーが発生し、オーバーライドは適用されません。

これはこれらの問題を修正し、@Tomと@Dmitryの回答よりも優れています。

ああ、私はemacs-lisp-modeをブロックすることを強くお勧めします。そうしないと、オートコンプリートがトリガーされるたびにSemanticが実行中のEmacsインスタンスのソースコードツリー全体を解析しようとします。これにより、パッケージが多い場合にEmacsがフリーズします。

于 2016-12-11T22:49:09.920 に答える