28

たとえば、zen-coding のコードでは、「Cj」は「Cj」の通常の動作を隠します ( newline-and-indent) 。

(define-key zencoding-mode-keymap (kbd "C-j") 'zencoding-expand-line)

C-j次に、このキーバインドを解除してnewline-and-indent再度使用するにはどうすればよいですか?

私はこれを試しましたが、うまくいきません:

(add-hook 'html-mode-hook
          (lambda ()
            (progn
              (zencoding-mode)
              (local-set-key (kbd "C-j") 'newline-and-indent))))

誰かがこれについてアイデアを持っていますか?

4

1 に答える 1

47

キーのバインドを解除する一般的な方法 (キーマップの場合) は、次のバインドを定義することですnil

(define-key KEYMAP KEY nil)

便宜上、グローバル キーマップとローカル キーマップ (通常はメジャー モードのキーマップ) からバインドを解除するための 2 つの標準関数もあります。

  • (global-unset-key KEY)
  • (local-unset-key KEY)

これらは、それぞれの補足global-set-keyおよびに従って、対話型コマンドlocal-set-keyです。

あなたの特定の例に関しては、おそらく次のようなものが必要です。

(with-eval-after-load "zencoding-mode"
  (define-key zencoding-mode-keymap (kbd "C-j") nil))

同様のことをしようとしている他の読者の"zencoding-mode"ために、これらの引数は、ロードされるライブラリの名前が zencoding-mode.el であるためです (「.el」接尾辞を省略する必要があることに注意してください)。zencoding-mode.el はそのキーマップを明示的に宣言し、標準名を使用しないという点で珍しいため、zencoding-mode-keymap典型的な/期待されるものではありません。zencoding-mode-map

問題のキーが何にバインドされているかを確認するために使用C-hkすると、Emacs はキーマップの名前と、両方の引数を確立するライブラリの名前の両方を教えてくれます。

于 2012-12-20T06:08:38.613 に答える