仅有的幸福2017-05-16 16:35:49
实际上和原始写法有很大关系。
#include<stdio.h>
int main(int argc, char *argv[])
{
for(i in f){
if(i ==9 ){
printf("1");
}else{
printf("2");
}
}
}
如果像上面这样子的习惯写法,用 gg=G 的结果很酷:
#include<stdio.h>
int main(int argc, char *argv[])
{
for(i in f){
if(i ==9 ){
printf("1");
}else{
printf("2");
}
}
}
堪称完美。
PHPz2017-05-16 16:35:49
第一步:ggvG
///< 先回到首行, 然后选择模式, 全选代码
第二步:=
///< = 一般用于均等布局, 这里表示代码缩进. vim 多splite下, 还可以 均等调整每个splite的大小
高洛峰2017-05-16 16:35:49
对, 10086和tdblq没有注意到题主对于括号的要求.
先上命令
%s/ {/^M{^M/g
%s/ }/^M}/g
%s/};/}/g
%s/)\([^;]\+\);/)^M;/g
gg
=G
第1~3行是在处理花括号的问题.
第4行是为了解决
for(i=0;i<5;i++)j++;
变成
for(i=0;i<5;i++)
j++;
第5~6行就是全文自动缩进了.
注意 其中的^M不是直接输入的, 而是"ctrl+v"+"回车"得到的.
但是这些也不过是解决的是格式的问题.
题主说要从一个for循环的代码"格式化"到一个有while的代码,
我猜是笔误吧?
ringa_lee2017-05-16 16:35:49
其实严格来讲,vim是搞不定的。gg=G能作的只是以行为单位调整缩进。真的要lz那样的需求需要外部工具,比如indent。假设你有一个完美的indent的配置。那么在vim里面可以用%!indent来搞定