每当我在某些缓冲区中输入任何内容时,我就一直在emacs中收到此错误:
c-forward-sws:错误的类型参数:stringp,nil
它似乎是一种强调语法的东西;每当我输入任何内容时,我都会在一个缓冲区中使用sh-mode - 甚至返回一个空行。我偶尔也会在C ++模式缓冲区中得到它,但我不记得具体的行,也不能在这种模式下重现它。
我最近没有改变我的.emacs(我记得)。
任何想法是什么问题?该函数在cc-engine.el中定义,但我很难弄清楚上下文。
答案 0 :(得分:4)
要弄清楚问题,你需要多做一些调查。你提供的是不够的(除非回答者已经看到了具体的问题)。
第一步通常是将变量debug-on-error
设置为t
。这将为堆栈跟踪提供更多信息(通常告诉您函数中的哪个表达式导致问题)。
如果你可以可靠地重现问题,那么不要设置上面的变量,而是转到函数定义( Mx find-function c-forward-sws RET ),然后设置它使用 Mx edebug-defun 进行调试。然后做什么导致错误并逐步执行代码。如果您熟悉查看lisp,调试器非常直观,文档可以在this info page上找到。
至少,添加堆栈跟踪可能会提供足够的信息来获得答案,尽管可能需要一个测试用例来重现问题......
答案 1 :(得分:3)
您有auto-fill-mode
开启且auto-fill-function
为c-do-auto-fill
的情况很好,这对其他语言效果不佳。关闭自动fil(M-x auto-fill-mode
)或更改填充功能的值。
您应该能够使用auto-fill-mode
RET M-x debug-on-entry
显式调试auto-fill-mode
的条目,并查看调用它的内容。可能有一个钩子正在打开它,它将出现在堆栈轨迹中。
[更新]
我发现auto-fill-function
的全局值已被设置(它应该始终是缓冲区本地的)。结果是所有缓冲区都默认使用该函数的自动填充。我还没有确定如何设置全局值,但可以使用(setq-default auto-fill-function nil)
清除它。