8

Emacs でオートコンプリートと yasnippet を使用していますが、それらの設定に混乱しています。次のコードを my に配置しました.emacs

(add-to-list 'load-path "~/.emacs.d/plugins/yasnippet")
(require 'yasnippet)
(yas/global-mode 1)
(global-set-key (kbd "C-i") 'yas/expand)
(setq yas/also-auto-indent-first-line t)

(add-to-list 'load-path "~/.emacs.d/plugins/autocomplete/")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/plugins/autocomplete/ac-dict")
(ac-config-default)
(setq ac-use-menu-map t)
(define-key ac-menu-map "\C-n" 'ac-next)
(define-key ac-menu-map "\C-p" 'ac-previous)

(defun ac-js-mode()
(setq ac-sources '(ac-source-yasnippet
                 ac-source-symbols
                 ac-source-words-in-buffer
                 ac-source-words-in-same-mode-buffers
                 ac-source-files-in-current-dir
                 )))
(add-hook 'js-mode-hook 'ac-js-mode)

オートコンプリート ポップアップ メニューの最初の候補として yasnippet を設定しようとしています。ただし、以下の例が示すように、これは現在の設定では機能しません。単語を入力するとfor、 ,formatItemが最初の位置にありfor、2 番目に表示されます。formatItem現在のバッファ内の単なるローカル関数です。

 for_____________
|formatItem      |
|for            a|
|for            s|
|force          s|
|foreachv       s|
 ----------------

だから私の質問は: どうすれば yasnippet をオートコンプリートの最初の候補にすることができますか? .emacsそして、私の設定に欠けているものはありますか?

どんな助けでも大歓迎です。

4

1 に答える 1

5

ac-config-default適切なデフォルトac-sources値を設定するためのフックをインストールします。これらのフック (特にac-common-setup) は、設定に干渉する可能性があります。

ac-sourcesこれは、バッファ内の( C-h vac-sources)の実際の値を調べてjs-mode、カスタム値と比較して変更されているかどうかを確認することで確認できます。

この場合、次の 2 つの解決策があります。

  • 使用を中止しac-config-default、すべてのautocomplete設定を指定します。
  • 障害のあるフックが実行された後ac-source-yasnippetの先頭に置くようにアドバイスしac-sourcesます。ac-common-setup が実際にトラブルメーカーであると仮定すると、これは次のようになります。
(defadvice ac-common-setup (after give-yasnippet-highest-priority activate)
  (setq ac-sources (delq 'ac-source-yasnippet ac-sources))
  (add-to-list 'ac-sources 'ac-source-yasnippet))
于 2012-03-26T10:19:46.993 に答える