我该如何在Vim中缩进一段C代码块?

15

http://stackoverflow.com/questions/413208/how-to-indent-code-in-vim-editor-in-windows - Kent Fredric
https://dev59.com/UnRC5IYBdhLWcg3wAcM3 - Kent Fredric
8个回答

37

我很惊讶还没有人提到 =%
确保你已经使用了:set cindent
把光标移动到你的代码块的一个 {} 上,然后只需要按下:

=%

此代码块中的所有代码将正确缩进。


它在我的vim中只缩进了一行。有什么想法吗? - Mykola Golubyev
你不在其中之一 {} 上。 - Yewge
1
@Steve K:抱歉,我误解了。我没有放在{}里面,而是放在里面了。 - Mykola Golubyev
3
使用文本对象,您可以使用=i{而无需位于特定块的开头/结尾行。 - michael
@michael 或 =iB(块内自动缩进) - Nick Zalutskiy
显示剩余2条评论

8
使用“>”来缩进一个块。

1
选择所述的可视块后... - MacGyverQue

7

进入可视模式,选择下一个匹配的括号,并进行缩进:

V
%
>

4

在插入模式下:按下C-d键,然后按C-t键
在可视化模式下:使用>和<键
在正常模式下:使用>>和<<键

在任何模式下,使用'.'来进一步缩进。


1
尝试一下:
:set cindent
这将在vim中打开C缩进魔法。因此,只要您打开一个大括号,它就会自动缩进,直到您关闭该大括号。

0
如果您有未缩进的代码,看起来像这样...
if (foo)
{
/* line 1 */
/* line 2 */
/* line 3 */
}

...在命令模式下将光标放置在“第1行”上,然后键入3==,其中3是要缩进的行数。


0

我认为这样做可以避免设置任何缩进开关。

:startRange,stopRange s/^/^\t/g

在您提供的行号范围之间,在行首应添加一个制表符

使用以下方法取消缩进:

:startRange,stopRange s/^\t/^/g

0

除了skinp所说的,如果你有:

   int foo()
   {
   /* line 1 */
       /* line 2 */
       /* line 3 */
       /* line 4 */
   }

如果出于某种原因,您希望它看起来像这样(即您希望将所有内容缩进4个空格*,而不是根据cindent规则进行正确的缩进):

   int foo()
   {
       /* line 1 */
           /* line 2 */
           /* line 3 */
           /* line 4 */
   }

在代码块内的任何位置,执行 viB> (visualselection innerBlock indent)**

* 或者你设置的 shiftwidth

** vi} 和 viB 是相同的,可能更容易记住,因为 vi} 选择 {} 内部,vi) 选择 () 内部,vi] 选择 [] 内部,vi> 选择 <> 内部。

此外,va}、va) 等不仅选择代码块内部,还选择 {}、() 等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接