emacs function c-forward-sws:错误的类型参数:stringp,nil

时间:2010-01-14 13:57:20

标签: emacs syntax-highlighting elisp

每当我在某些缓冲区中输入任何内容时,我就一直在emacs中收到此错误:

c-forward-sws:错误的类型参数:stringp,nil

它似乎是一种强调语法的东西;每当我输入任何内容时,我都会在一个缓冲区中使用sh-mode - 甚至返回一个空行。我偶尔也会在C ++模式缓冲区中得到它,但我不记得具体的行,也不能在这种模式下重现它。

我最近没有改变我的.emacs(我记得)。

任何想法是什么问题?该函数在cc-engine.el中定义,但我很难弄清楚上下文。

2 个答案:

答案 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-functionc-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)清除它。