如何在vim中快速格式化这个代码?

浏览:42日期:2023-08-14

问题描述

#include<stdio.h>int main(int argc, char *argv[]){int i=0;if (i != 0) {i++; }else {i--; };for(i=0;i<5;i++)j++;printf('i=%d,j=%dn',i,j);return 0;}上面的代码如何快速格式化成这个样子?#include int main(int argc ,char* argv[]){ int a = 4; int b = 5; int f_a = factorial(a); int f_b = factorial(b); while(1) {if(cmp(f_a,f_b)){ printf('f_a is bigger than f_bn');}else{ printf('f_a is not bigger than f_bn');}sleep(100); } return 0; }不用插件,自己可否写一个简单的模板文件,用来格式化文件?10086的解答结果不对。 ggvG = 变成 #include<stdio.h>int main(int argc, char *argv[]){int i=0;if (i != 0) {i++; }else {i--; };for(i=0;i<5;i++)j++;printf('i=%d,j=%dn',i,j);return 0;}

问题解答

回答1:

实际上和原始写法有很大关系。 #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'); }}

}

堪称完美。

回答2:

gg=G回答3:

其实我用比较多的是,在visual 模式下, 移到行最开始 按下:> 即 同时按下’shift + .’

回答4:

!astyle --style=[你想要的格式] -p -H --suffix=none %

如果你装了 astyle

回答5:

第一步:ggvG ///< 先回到首行, 然后选择模式, 全选代码第二步:= ///< = 一般用于均等布局, 这里表示代码缩进. vim 多splite下, 还可以 均等调整每个splite的大小

回答6:

ggvG=

回答7:

对, 10086和tdblq没有注意到题主对于括号的要求.

先上命令

%s/ {/^M{^M/g%s/ }/^M}/g%s/};/}/g%s/)([^;]+);/)^M1;/ggg=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的代码, 我猜是笔误吧?

回答8:

其实严格来讲,vim是搞不定的。gg=G能作的只是以行为单位调整缩进。真的要lz那样的需求需要外部工具,比如indent。假设你有一个完美的indent的配置。那么在vim里面可以用%!indent来搞定

回答9:

选择要缩进的行,大V进入行模式,然后直接按>右缩进,<左缩进,一行一行自己排排就好了_(:з」∠)_

相关文章: