2

我正在为 Emacs 开发一种模式,每次切换到它的缓冲区时,viper 都会打开。我已经修改了 viper-mode 以跟踪调用 viper-mode 的位置,并且令人惊讶的是set-viper-state-in-major-mode是通过运行viper-post-command-hooks调用的,设置为 nil。知道发生了什么吗?

谢谢!


编辑:为了众生的利益,这是我发现的:按照 Trey 的指示,我使用 -Q 启动了 emacs 并手动加载了 viper 和我的包。由于我可以重现该错误,因此问题出在其中一个软件包上。在逐行过滤之后,我发现看似无害的(kill-all-local-variables)导致了问题。

4

4 回答 4

4

初始化中有一些东西导致了它。

首先尝试不使用您的.emacs emacs -q. 如果问题仍然存在,则触发器位于site-start.el. 因此,与安装 Emacs 的人交谈,让他们删除那里的自定义设置。您也可以始终使用-Q启动选项来避免加载site-start.el.

如果问题不在 中site-start.el,并且您认为它不在您的 中.emacs,则它可能在自定义default.el文件中,您可以通过添加以下内容来防止加载该文件:

(setq inhibit-default-init t)

到你的.emacs.

如果您仍然有问题,那么我 99% 确定它在您的 .emacs 中。

要 100% 确定,请尝试emacs -Q运行 Emacs 而不进行自定义。如果问题仍然存在,请下载并安装您自己的 Emacs b/c,您肯定无法信任您正在使用的安装。

因此,现在如果您确信它在您的 中.emacs,请开始删除您的部分,或者在您的with.emacs中引入错误,并逐步排除您的哪些部分导致了问题。.emacs(error "frog").emacs

好运

于 2011-04-15T05:10:02.790 回答
3

该函数kill-all-local-variables将运行添加到的所有函数change-major-mode-hook,这是全局次要模式初始化自身的常用方式。例如,全局字体锁定全局 cwarn 模式使用它。

我自己没有使用过viper,但很有可能它使用了这种机制。当然,您仍然必须以某种方式在您的 init 文件中启用它,所以如果您只是停止这样做,它也会解决您的问题。

于 2011-04-15T05:56:40.300 回答
0

尝试在您的 .emacs 中注释掉任何对 viper 模式的引用。我不会进入毒蛇模式,除非我在评估你的新模式之前开始玩毒蛇模式。

也许这个声明所做的事情比你想象的要多:

  (使用本地地图生态地图)

尝试更改地图中的一些绑定。例如。j 到 Cj 和 k 到 Ck。

也许emacs变得困惑?

于 2011-04-15T04:45:21.567 回答
0

尝试删除您的~/.viper配置文件,并检查您.custom.el的设置可能会在您的主要模式(或全局)中启动 viper。

于 2011-04-15T07:33:20.530 回答