.emacsファイルで完全に機能するemacsマクロ(global-set-key)がありますが、何らかの理由で.cファイルでは機能しません。
(global-set-key "\C-c\C-d" "\C-a\C- \C-e\M-w\C-j\C-y")
.emacsファイルを閉じて再度開き、いじり始めると、このマクロは期待どおりに動作し、1行を下の行にコピーします。ただし、Cファイルを開くと、同じマクロが文字を削除するだけです(Cdでのみ取得されるようです)。
何か案は?
.emacsファイルで完全に機能するemacsマクロ(global-set-key)がありますが、何らかの理由で.cファイルでは機能しません。
(global-set-key "\C-c\C-d" "\C-a\C- \C-e\M-w\C-j\C-y")
.emacsファイルを閉じて再度開き、いじり始めると、このマクロは期待どおりに動作し、1行を下の行にコピーします。ただし、Cファイルを開くと、同じマクロが文字を削除するだけです(Cdでのみ取得されるようです)。
何か案は?
cc-modeは、であると定義C-c C-dしc-mode-base-map
ますc-hungry-delete-forward
。これは、グローバルレベルでバインディングを非表示にします。したがって、これを解決するためのより良い方法は、作成したバインディングの定義cc-mode
を解除することです。これを行うには、次のようにします。
(eval-after-load "cc-mode"
'(define-key c-mode-base-map (kbd "C-c C-d") nil))
フックで実行することもできますが、eval-after-load
実行されるのは1回だけなので、私は好みます。
注:ファイルを開いて(aka )c-mode
と入力し、次のように表示して、既存のバインディングを決定しました。C-h C-k C-c C-dM-x describe-binding C-c C-d
Cc Cdは、コマンドc-hungry-delete-forwardを実行します。これは、`cc-cmds.el'のインタラクティブにコンパイルされたLisp関数です。
これにより、バインディングが(の1つ)で設定されていることがかなり明確になったc-mode
ので、ソースファイルを開いた(またはgrep
編集した)と、次のc-hungry-delete-forward
ことがわかりました。
(define-key c-mode-base-map "\C-c\C-d" 'c-hungry-delete-forward)
そして、答えは簡単でした。
再定義するよりも、必要なグローバルバインディングを非表示にするローカルバインディングの定義を解除する方が良いと思います。問題のあるバインディングを見つけるのも同じくらいの作業です。このように、グローバルバインディングの関数を変更する場合は、1か所で行うだけで済みます。
明らかに、Cモードはバインディングを削除または変更しています。それをc-mode-hookに追加して、それが機能するかどうかを確認することができます。これに似ています:
(add-hook `c-mode-hook '(lambda ()
(global-set-key "\C-c\C-d" "\C-a\C- \C-e\M-w\C-j\C-y")))
または。c-mode-hook
_ グローバルなものの代わりに使用して、このバッファーだけにバインディングを適用するc-mode-common-hook
こともできます。local-set-key