2012-02-22 4 views
2

"M-"を再定義しようとしています。 ENSIMEモードでは、ensime-edit-definitionの代わりにauto-completeを実行します。デフォルトバインディングはどれですか。しかし、一度ensimeモード負荷をemacsのENSIMEスカラーモードでキーを再定義する

(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) 

、何とか戻って、デフォルトのキーを再定義:私はの.emacsに次のコードを持っています。私が「(ensime-mode)」とコメントアウトすると、正しくマップされます。

ここで何をすればよいですか?私は行方不明の別のモードフックですか?それとも注文が違うのでしょうか?

はどうやらensimeモードは、そのバインディングはメジャーモードのバインディングよりも優先して、マイナーモードであるあなたに

答えて

5

ありがとうございます。 local-set-keyはメジャーモードのバインディングに影響します。 - それは、それを修正する方が簡単です、なぜならもしあなた」

(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))) 
+0

それはフックのために別の関数を定義すると良いでしょう:あなたが代わりに(未テストの100%をguarantedd)は、次のような何かをしたい場合があります匿名関数を変更して再度フックすると、名前付き関数は常に1つのエントリを持ちますが、2つのコピーがあります... –

関連する問題