搜索

首页  >  问答  >  正文

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

雷雷
高洛峰高洛峰2743 天前609

全部回复(9)我来回复

  • 仅有的幸福

    仅有的幸福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");
        }
    }

    }

    堪称完美。

    回复
    0
  • phpcn_u1582

    phpcn_u15822017-05-16 16:35:49

    雷雷

    回复
    0
  • ringa_lee

    ringa_lee2017-05-16 16:35:49

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

    回复
    0
  • 黄舟

    黄舟2017-05-16 16:35:49

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

    如果你装了 astyle

    回复
    0
  • PHPz

    PHPz2017-05-16 16:35:49

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

    回复
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-16 16:35:49

    gg
    vG
    =

    回复
    0
  • 高洛峰

    高洛峰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的代码,
    我猜是笔误吧?

    回复
    0
  • ringa_lee

    ringa_lee2017-05-16 16:35:49

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

    回复
    0
  • PHP中文网

    PHP中文网2017-05-16 16:35:49

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

    回复
    0
  • 取消回复