2

「M-」を再定義しようとしています。ENSIMEモードで、ensime-edit-definitionの代わりにオートコンプリートを実行します。これがデフォルトのバインディングです。.emacsに次のコードがあります:

(defun my-scala-mode()
  (ensime-mode)
  (local-set-key [return] 'newline-and-indent)
  (local-unset-key (kbd "M-."))
  (local-set-key (kbd "M-.") 'auto-complete)
  (global-unset-key (kbd "M-."))
  (global-set-key (kbd "M-.") 'auto-complete)
  ;(scala-electric-mode)
  (yas/minor-mode-on))
(add-hook 'scala-mode-hook 'my-scala-mode)

ただし、ensimeモードが読み込まれると、どういうわけかキーがデフォルトに再定義されます。「(ensime-mode)」とコメントアウトすると、正しくマップされます。

ここで何をすればいいですか?私が見逃している別のモードフックはありますか?または、順序を変える必要がありますか?

ありがとうございました

4

1 に答える 1

5

どうやらensime-modeはマイナーモードであるため、そのバインディングはメジャーモードのバインディングよりも優先されます。また、local-set-keyはメジャーモードのバインディングに影響します。代わりに、次のようなことを行うことをお勧めします(100%テストされていないことが保証されています)。

(require 'ensime)
(define-key ensime-mode-map (kbd "M-.") 'auto-complete)

また

(add-hook 'ensime-mode-hook (lambda () (define-key ensime-mode-map (kbd "M-.") nil)))
于 2012-02-23T04:28:20.037 に答える