Jon*_*Jon 2 emacs configuration elisp
我有一个emacs宏(global-set-key)在我的.emacs文件中运行得很好,但无论出于何种原因,它在我的.c文件中都不起作用.
(global-set-key "\C-c\C-d" "\C-a\C- \C-e\M-w\C-j\C-y")
如果我关闭并重新打开我的.emacs文件并开始搞乱,这个宏就会按预期运行,将一行复制到下面一行.但是,当我打开一个C文件时,同一个宏只删除一个字符(它似乎只能在Cd上获取).
有任何想法吗?
在CC-模式定义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))
Run Code Online (Sandbox Code Playgroud)
你也可以在一个钩子里做,但我更喜欢,eval-after-load因为它只执行一次.
注意:我通过打开文件c-mode并输入C-h C-k C-c C-d(aka M-x describe-binding C-c C-d)确定了现有的绑定,并看到:
Cc Cd运行命令c-hungry-delete-forward,它是`cc-cmds.el'中的交互式编译Lisp函数.
这很清楚,绑定是在(其中一个)c-modes中设置的,所以我只是打开(或grep编辑)源文件,因为c-hungry-delete-forward我找到了:
(define-key c-mode-base-map "\C-c\C-d" 'c-hungry-delete-forward)
Run Code Online (Sandbox Code Playgroud)
然后答案是直截了当的.
我认为最好取消定义隐藏所需全局绑定的本地绑定,而不是重新定义它们.找到有问题的绑定也是同样多的工作,这样如果你想改变全局绑定的功能,你只需要在一个地方完成.