Emacs 如何确定哪个包正在取消键绑定?

Emacs 如何确定哪个包正在取消键绑定?,emacs,Emacs,“我的配置”中的某些内容正在取消/覆盖C-C-e的一些标准键绑定,因此各种主要模式下的命令无法正常工作。在AUCTeXC-C-e中,应启动“插入环境”对话框,在组织模式中,相同的键应启动导出/发布对话框,但在这两种模式中C-C-e未定义,emacs仅等待更多输入 我知道我可以用-Q启动emacs并加载包,直到出现故障(如果我以这种方式加载emacs并在组织模式下打开文件,键绑定将正常工作),但是,像许多人一样,在某个时候,我的init文件变得异常大。有没有更快捷、更聪明的方法 [编辑]我的配置中

“我的配置”中的某些内容正在取消/覆盖
C-C-e
的一些标准键绑定,因此各种主要模式下的命令无法正常工作。在AUCTeX
C-C-e
中,应启动“插入环境”对话框,在组织模式中,相同的键应启动导出/发布对话框,但在这两种模式中
C-C-e
未定义,emacs仅等待更多输入

我知道我可以用
-Q
启动emacs并加载包,直到出现故障(如果我以这种方式加载emacs并在组织模式下打开文件,键绑定将正常工作),但是,像许多人一样,在某个时候,我的init文件变得异常大。有没有更快捷、更聪明的方法


[编辑]我的配置中没有任何东西会显式取消设置
C-C-e

您可以使用
C-h k C-C-e
找出哪个函数绑定到您的组合

在弹出的帮助缓冲区中,您将获得函数名、它的文档以及到定义它的文件的链接。遵循该链接,您将到达函数定义的位置

此时,使用文件名识别负责重新定义keybinding的包应该很简单


如果这没有帮助,您可以在自定义目录中为“C-C-e”或“C-e”设置
M-x rgrep
,并手动检查所有内容。

调试器可能会为您提供足够的线索来进行排序。尝试将以下内容添加到
.emacs
的开头:

(debug-on-entry 'global-unset-key)

您可能还需要尝试“local-unset-key”。有关详细信息,请参见。

二进制搜索是您的朋友

转到
.emacs
中间并添加
(错误“此处”)
,然后启动emacs,查看问题是否仍然存在

如果是,则在当前错误行和文件顶部之间的中间插入另一个错误行;如果不是,则注释掉当前错误,并在当前错误行和文件底部之间添加一个错误行


重复二等分过程,直到分离出导致问题的一两条线。

问题在于此组合未定义,因此
C-h k
没有帮助。我的配置中没有任何东西明确地破坏了组合,但我想我正在加载的东西一定是。Raffaele Ricciardi在gnu.emacs.help上建议的一个变体最终为我解决了这个问题:
C-C-e C-h
列出了使用此组合的所有绑定(不仅仅是当前的主/次模式)。这为我指明了罪魁祸首eclim的方向。这是一个很好的建议,但不幸没有起到作用。调试表明,
mwheel
包是唯一一个调用
global unset key
的包,但是删除它没有帮助。显然没有包调用
本地未设置键
。奇怪,很奇怪。为了解决问题,我打开一个emacs实例,用
M-注释掉一半的
.emacs
(并保存文件),然后打开第二个实例(不带
-Q
标志)。如果问题在第二个实例中仍然存在,请关闭它并注释掉第一个实例中剩余的.emacs代码的一半。重复这个过程,即使有一个大的配置文件,也可以很快缩小搜索范围。很抱歉,这就是我所拥有的:(将绑定设置为
nil
与取消绑定是一样的(事实上,您会发现这正是前面提到的两个函数实际所做的),因此您无法使用该建议捕获所有相关事件。好的建议,我稍后会尝试。