gpt4 book ai didi

Emacs 宏在 .emacs 文件中有效,但在源文件中无效?

转载 作者:行者123 更新时间:2023-12-01 14:00:33 26 4
gpt4 key购买 nike

我有一个 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 文件时,同一个宏只是删除了一个字符(它似乎只在 C-d 上出现)。

有什么想法吗?

最佳答案

cc-mode将c-mode-base-map中的C-c C-d定义为c-hungry-delete-forward,即在全局级别隐藏您的绑定(bind)。因此,解决此问题的更好方法是取消定义 cc-mode 进行的绑定(bind),您可以使用以下方法实现:

(eval-after-load "cc-mode"
'(define-key c-mode-base-map (kbd "C-c C-d") nil))

您也可以在钩子(Hook)中执行此操作,但我更喜欢 eval-after-load,因为它只执行一次。

注意:我通过在 c-mode 中打开一个文件并键入 C-h C-k C-c C-d(又名 M-x describe-binding C-c C-d), 然后看到:

C-c C-d runs the command c-hungry-delete-forward, which is an interactive compiled Lisp function in `cc-cmds.el'.

这很清楚绑定(bind)是在(其中一个)c-mode 中设置的,所以我只是打开(或 greped) c-hungry-delete-forward 的源文件,于是我发现:

(define-key c-mode-base-map "\C-c\C-d"     'c-hungry-delete-forward)

然后答案就很直接了。

我认为最好取消定义隐藏您想要的全局绑定(bind)的局部绑定(bind),而不是重新定义它们。找到有问题的绑定(bind)同样需要做很多工作,这样,如果您想更改全局绑定(bind)的功能,您只需在一个地方进行。

关于Emacs 宏在 .emacs 文件中有效,但在源文件中无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10936273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com