Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs 制表符缩进的正确设置_Emacs - Fatal编程技术网

Emacs 制表符缩进的正确设置

Emacs 制表符缩进的正确设置,emacs,Emacs,使用带有C源代码的Emacs,我想按tab键插入一个制表符,并将制表符显示为2个空格宽。这就是我在~/.emacs中的内容: (setq c-default-style“linux”) (setq默认c-基本-偏移量2 制表符宽度2) 但是,它不将一个选项卡计为一列,在本例中为2列,并且当我想跳转到gcc在错误消息中指定的位置时,它会导致一个问题 int main() { if(1) { if(2) {

使用带有C源代码的Emacs,我想按tab键插入一个制表符,并将制表符显示为2个空格宽。这就是我在~/.emacs中的内容:

(setq c-default-style“linux”)
(setq默认c-基本-偏移量2
制表符宽度2)

但是,它不将一个选项卡计为一列,在本例中为2列,并且当我想跳转到gcc在错误消息中指定的位置时,它会导致一个问题

int main()  
{  
    if(1)  
    {  
        if(2)  
        {  
            error  
        }  
    }  
}
出现此错误时:

test.c:7:5 error: `error` undeclared (first use in this function)

因此,当我选择错误时,它会跳到错误的位置。有没有办法解决这个问题?

您是否尝试过将
c-syntatic-indentation
设置为nil?

您是否尝试过使用
-ftabstop=2
调用gcc?

从不让ASCII水平制表符(HT)字符(字节值0x9)表示除“移动到下一个8列边界”之外的任何内容。弄乱这个默认值会弄乱各种unix程序,通常会导致问题

如果您想要2-space缩进,这很好,而且您希望在点击TAB键时发生缩进也很好。Emacs将HT字符的概念与缩进字符的概念分开,并且每个字符都可以单独控制

刚开始

(setq c-basic-offset 2)
.emacs
文件中。现在,每当您在C程序中点击TAB键时,emacs将自动正确地重新识别该行。您可以使用
M-i
C-q选项卡
插入真实的HT字符


如果这仍然不是您想要的,您可以进行更多的定制,但这是正确的开始方式。

将HT字符设置为可变大小,这样一个想要4个空格标签的人就可以按自己的方式进行定制,这不是很有利吗,同样的源代码可以通过两个空格键来查看,以供其他喜欢这种方式的人使用?这个概念不会影响我所知道的任何unix程序。无论如何,似乎即使插入了一个真正的HT字符,Emacs仍然将其视为8个字符,而不是一个字符,因此我的问题没有进展。@kaykun:并不是程序被HT字符弄糊涂了,因为很多(大部分是旧的)实用程序都知道HT对应于8个空格,虽然你可以单独覆盖它,但结果是有点拖拉。即使只是查看一个文件,为四格制表符编写的代码在两格制表符上看起来也不错,但反过来看,结果几乎总是很糟糕。@kaykun:你能澄清一下你的最后一句话吗?如果您已将
c-basic-offset
设置为2,并将
tab width
保留为8,您能否描述一下当您在输入的第三行开始处按tab键时会发生什么情况?如果为两个空格的制表符编写的代码在使用四个空格的制表符时看起来很糟糕,那么就很容易将其更改回两个空格。这是使用HT字符提供的灵活性;对于空格,一个人被迫使用他或她可能不喜欢的一个制表符宽度。只将c-basic-offset设置为两个空格的两个缩进,但这不是我的问题。我唯一想要的是将一个选项卡视为一个列号,因为gcc将HT字符视为一个列号,并且它会影响其错误消息。