我正在开发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)导致了这个问题。
答案 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蛇。