Vim 使用笔记:gggqG 命令

我们来看这段文本。

        indent Line 1
    DO NOT indent Line 2

    *   comment 1
    *   comment 2

        indent Line 3
    DO NOT indent Line 4

先调整两个设置。

    set formatoptions=tcq2
    set comments=s:*,m:*,e:*

然后执行命令:

gggqG

因为 formatoptions 选项里含有 2,所以照理说,Line 2 和 Line 4 都不会被缩进。实际结果是,第 2 行没有被缩进,Line 4 和 Line 3 一样被缩进了。

如果把光标移动到 Line 3 所在的段落,使用 gqip 命令,Line 4 不会缩进。

如果只有一行 comment,Line 4 不会缩进。

如果去掉 formatoptions 选项里的 q,即:

set formatoptions=tc2

虽然 Line 4 不会缩进,但是两行 comment 会合并成一行。

如果既要保留 formatoptions 选项里的 q 参数,又要使得 comment 之后的段落缩进正确,目前我采用这个方法:在 while 循环里用 gqip。

    1

    let l:k = 0

    while l:k < 2

        exe 'normal gqip'

        '}
        +1

        if line('.') == line('$')

            let l:k = l:k + 1

        endif

    endwhile

总之,我发现 gggqG 这个命令似乎无法正确处理缩进。我不确定是自己对 formatoptions 选项或者 gq 命令的理解有误,还是 Vim 本身设计如此。这个问题暂时存疑。