2012-06-13 60 views
3

我试图缩进emacs的SQL文件中的行,我觉得C-缩进行对我来说是相当不错的,所以我写这篇文章的代码到我的初始化文件:的Emacs缩进线功能

(defun my-sql-mode() 
    (setq indent-line-function 'c-indent-line) 
    ) 

(add-hook 'sql-mode-hook 'my-sql-mode) 

但是当我用tab来缩进这行时,它总是给我提供'错误的类型参数:stringp,nil'的提示。

有人可以帮助我吗?

回答

2

Emacs中的缩进通常是智能的,但它并不神奇。

c-indent-line是为C和C++代码设计的函数。在其他情况下它可能不起作用并不令人惊讶,而且我不确定在面对SQL代码时你期望它做什么?

恐怕答案很简单:不要这样做。

如果您告诉我们您希望这么做,但有人可能会提供帮助。

+2

我认为他希望他的SQL代码像他的C/C++代码一样缩进,并认为这就是'indent-line-function'应该做的事情。他不明白的是,虽然它确实负责缩进之后的行,但它还必须解析并理解缓冲区内容,以确定如何缩进特定行。对于你,@ phils,显然'c-indent-line'不能理解SQL代码,因此失败,对于@Eorza而言,它并不那么清楚。 –

+0

确实,其中*有*其他基于c模式的编程模式,因此可以使用具有适当配置的相同压痕机器。尽管你可以像你说的那样在这种情况下添加必要的配置来防止错误,但它似乎是一种相当奇怪的方法,因为SQL和C几乎没有任何共同之处。 – phils