15

复制:

如何在 Windows 的 vim 编辑器中缩进代码?

在 VIM 中选择部分

有时我想在 Vim 中缩进一段 C 代码。我通常会逐行标记它。

什么是更好/更快的方法?

4

8 回答 8

37

我很惊讶还没有人想出=%
确保你有:set cindent
把自己放在{}你的块之一上,然后点击:

=%

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

于 2009-03-11T16:51:53.630 回答
8

使用 '>' 标记一个块

于 2009-03-11T16:32:22.697 回答
7

进入视觉模式,选择到下一个匹配的括号,缩进:

V
%
>
于 2009-03-11T16:31:39.297 回答
4

插入时:Cd、Ct
可视时:>、<
正常时:>>、<<

在任何这种模式下使用“。” 进一步缩进。

于 2009-03-11T16:36:09.020 回答
1

尝试

:set cindent

这将打开 vim 中的 C 缩进魔法。因此,只要您打开一个支架,它就会自动选择标签,直到您关闭支架。

于 2009-03-11T16:32:33.617 回答
0

如果您有看起来像这样的未缩进代码......

if (foo)
{
/* line 1 */
/* line 2 */
/* line 3 */
}

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

于 2009-03-11T16:37:02.373 回答
0

我认为这将在没有设置任何缩进开关的情况下完成。

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

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

取消缩进:

:startRange,stopRange s/^\t/^/g
于 2009-03-11T16:55:06.417 回答
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) 等除了块中包含的内容外,还选择 {}、() 等。

于 2009-03-11T17:05:37.157 回答