如何让emacs停止加载viper-mode?

时间:2011-04-15 02:20:11

标签: emacs elisp viper-mode

我正在开发a mode for Emacs,每次切换到缓冲区时,viper都会打开。我已经将viper-mode修改为调用viper-mode的trace,并且通过运行 viper来调用 set-viper-state-in-major-mode -post-command-hooks ,设置为nil。知道发生了什么事吗?

谢谢!


编辑:为了所有人的利益,这是我发现的:按照Trey的指示,我使用-Q启动emacs并手动加载viper和我的包。因为我可以重现这个bug,问题出在其中一个包上。在逐行过滤之后,我发现无意义的(kill-all-local-variables)导致了这个问题。

4 个答案:

答案 0 :(得分: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中,请开始删除部分.emacs,或在.emacs (error "frog")中引入错误,并逐步排除.emacs的哪些部分导致问题。

g'luck

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

尝试在.emacs中注释掉对viper模式的任何引用。除非我在评估你的新模式之前开始使用viper模式,否则我不会被发送到viper模式。

这句话可能比你想象的更多:

  (use-local-map ecoli-map)

尝试更改地图中的某些绑定。例如。 j到C-j和k到C-k。

也许emacs感到困惑?

答案 3 :(得分:0)

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