我们来看这段文本。
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 本身设计如此。这个问题暂时存疑。