2

私は GNU Emacs 24.3.1 の新しい構成で作業しています。会社でemacs-eclimを使いたいです。会社は正常に動作しますが、Java ファイルを開くと、正常に動作しなくなり、次のエラー メッセージが表示されます。

Company: An error occurred in auto-begin 
Invalid function: (java-mode javascript-mode js-mode ruby-mode php-mode c-mode c++-mode)

私のEmacs構成:

(require 'iso-transl)
(require 'recentf)
(require 'recentf-ext)
(require 'eclim)
(require 'company-emacs-eclim)
(require 'eclimd)

そして私のフック:

(add-hook 'after-init-hook
      (lambda ()
         (iswitchb-mode)
         (helm-mode 1)
         (auto-indent-global-mode)
         (toggle-diredp-find-file-reuse-dir 1)
         (recentf-mode 1)
         (global-flycheck-mode)
         (auto-indent-global-mode)
         (autopair-global-mode)
         (projectile-global-mode)
         (global-pretty-mode)
         (global-eclim-mode)
         (global-company-mode t)
         (yas-global-mode 1)))

(add-hook 'java-mode-hook
      (lambda ()
        (company-emacs-eclim-setup)
        (help-at-pt-set-timer)
        ))

これらは、Emacs パッケージ マネージャーを介してインストールしたパッケージです。

ace-jump-mode, auto-indent-mode, autopair, company, dash, dired+, emacs-eclim, epl, f, flycheck, fringe-helper, helm, helm-company, helm-flycheck, helm-projectile-all, hexrgb、java-snippets、javadoc-lookup、マルチターム、マルチカーソル、pkg-info、powerline、pretty-mode、projectile、recentf-ext、s、sublime-themes、visual-regexp、visual-regexp-steroids、そしてヤスニペット。

Emacs からのデバッグ情報は次のとおりです。

Debugger entered--Lisp error: (invalid-function (java-mode javascript-mode js-mode ruby-mode php-mode c-mode c++-mode))
  (java-mode javascript-mode js-mode ruby-mode php-mode c-mode c++-mode)(128)
  eclim-completion-start()
  (let ((start (eclim-completion-start))) (if start (progn (buffer-substring-no-properties start (point)))))
  (cond ((eql command (quote interactive)) (company-begin-backend (quote company-emacs-eclim))) ((eql command (quote prefix)) (let ((start (eclim-completion-start))) (if start (progn (buffer-substring-no-properties start (point)))))) ((eql command (quote candidates)) (company-emacs-eclim--candidates arg)) ((eql command (quote annotation)) (company-emacs-eclim--annotation arg)) ((eql command (quote meta)) (eclim--completion-documentation (concat arg (company-emacs-eclim--annotation arg)))) ((eql command (quote no-cache)) (equal arg "")) ((eql command (quote ignore-case)) t) ((eql command (quote sorted)) t) ((eql command (quote post-completion)) (let ((ann (company-emacs-eclim--annotation arg))) (if ann (progn (insert ann))) (eclim--completion-action))))
  company-emacs-eclim(prefix)
  #[0 "\n\203   [LONG STRING THAT CANNOT BE COPY]
  company--begin-new()
  company-begin()
  #[0 "\300 \207" [company-begin] 1 "\n\n(fn)"]()
  company-auto-begin()
  company-manual-begin()
  company-complete-common()
  call-interactively(company-complete-common record nil)
  command-execute(company-complete-common record)
  execute-extended-command(nil "company-complete-common")
  call-interactively(execute-extended-command nil nil)
4

2 に答える 2

4

私の水晶玉は、事前caseにロードせずに式にぶつかっていると言っています。cl問題がバイト コンパイルされたファイルにある場合は、ファイルを再コンパイルする必要があります。

(require 'cl)

~/.emacsファイルの早い段階のどこかで役立つかもしれません。

于 2014-05-07T12:48:33.433 に答える
3

M-x toggle-debug-on-error、エラーを引き起こします。これにより、エラー メッセージだけでなく、エラーが発生したときにどの式が評価されていたかを示すバックトレースが得られます。

この場合、一部の関数は引数の 1 つとして関数を期待していましたが、関数の代わりに次のリストが渡されました(java-mode javascript-mode js-mode ruby-mode php-mode c-mode c++-mode)

次に、バックトレースを詳しく調べて、関数がそのリスト引数をどのように渡されたかなどを確認できます。バックトレース (の左側) で関数名をクリックすると、その Lisp 定義が表示されます。

于 2014-05-07T05:33:25.417 に答える