在Vim中使用C自动缩进空格?


85

使用Eclipse和Java令我有些受宠若惊。我开始在Linux环境中使用vim进行C编码,有没有办法让vim自动为块做适当的间距?

因此,在输入{之后,下一行将缩进2个空格,而在该行上返回则将其缩进相同,而}将后退2个空格?

Answers:


134

这两个命令应该做到这一点:

:set autoindent
:set cindent

对于奖励积分,请将其放入Linux上主目录中的名为.vimrc的文件中


12
我还建议将它们放入〜.vim / ftplugin / c.vim中,以使您不会一直使用cindent,而仅用于C / C ++文件。
graywh

@graywh:请问pl,php,cpp,as,java以及我要具有相同缩进的所有其他文件呢?我需要为每个文件创建一个单独的设置文件吗?
davr

17
我靠Vim的捆绑缩进脚本(:打开文件类型缩进),这是很多比只用“cindent”的总是更好。
graywh 2010年

3
为什么文件类型缩进比使用cindent好是很好的解释在这里:vim.wikia.com/wiki/...
Jayen

1
对于自动缩进,您可能需要使用速记:set ai
Iam Zesh 2014年

56

在vim中编写了有关选项卡的所有内容,其中提供了一些您没有问过的有趣的事情。要自动缩进括号,请使用:

:set cindent

要缩进两个空格(而不是八个空格的一个制表符,vim默认):

:set shiftwidth=2

要防止vim将8个空格转换为制表符,请执行以下操作:

:set expandtab

如果要更改一段文本的缩进,请使用<和>。我通常将此功能与块选择模式结合使用(v,选择一个文本块,<或>)。

(由于我(和大多数其他人)觉得很难阅读,所以我会尽量避免使用二维空格缩进,但这是另一种讨论。)


非常好的博客。我对vim还是很陌生,很高兴知道那里有很多资源。
zxcv

3
您还错过了除shiftwidth之外更改softtabstop的操作。
graywh

8

vim的许多功能(例如autoindentcindent)默认情况下处于关闭状态。要真正了解vim可以为您做什么,您需要一个体面的人~/.vimrc

一个不错的开端$VIMRUNTIME/vimrc_example.vim。如果您想尝试一下,请使用

:source $VIMRUNTIME/vimrc_example.vim

在vim中。

实际上,我建议您仅将内容复制到您~/.vimrc的评论中,这是开始学习如何使用vim的好地方。你可以这样做

:e $VIMRUNTIME/vimrc_example.vim
:w! ~/.vimrc

这将覆盖您的当前设置~/.vimrc,但是如果您拥有的所有功能都是Davr建议的缩进设置,那么我不会费力,因为示例vimrc也会为您解决这一问题。有关示例的完整演练及其对您的作用,请参见:help vimrc-intro


6

只需运行:

user@host:~ $ echo set autoindent >> .vimrc

1
我不是投票否决的人,但这可能是因为简单地在输入“ {”和“}”时“设置自动缩进”并不会自动产生缩进,也不会自动将间距设置为2个空格。这就是他们要求的。
Victor Zamanian

3

我认为最好的答案实际上是在vim wikia上解释的:

http://vim.wikia.com/wiki/Indenting_source_code

请注意,建议不要使用“设置自动缩进”。我在此说明中发现的所有功能中,最好的功能是能够设置每个文件的设置,例如,如果您使用python和C ++编程,则该功能特别有用,因为您希望在前一个制表符中有4个空格,而在制表符中则需要2个空格后者中的空格。



-1

尝试:

设置sw = 2

设置ts = 2

设置smartindent


根据帮助,cindent比smartindent更好,但仅适用于类似C的代码。
thomasrutter

不推荐使用smartindent(也仅用于类似C的代码)。文件类型缩进脚本要好得多。
graywh 2010年

@graywh除了Wiki之外,哪个权威来源指出了smartindent的已弃用状态?
memeplex
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.