使用多行

时间:2016-07-19 17:35:09

标签: c++ vim ide indentation code-formatting

我正在寻找一个从丑陋的块中取出的工具

if   ( str == "str" ) decorator["str"] = &Props::goodstr;
  else if ( str == "strM" )
      decorator["strM"] =     &Props::goodstrM;
  else if ( str == "strXL" )     decorator["strXL"] =     &Props::goodstrXL;
  else if ( str == "strXXXL" ) decorator["strXXXL"] = &Props::goodstrXXXL;

在vim中可视块模式下可以在多行上轻松编辑的漂亮块:

if      ( str == "str"     ) decorator["str"    ] = &Props::goodstr    ;
else if ( str == "strM"    ) decorator["strM"   ] = &Props::goodstrM   ;
else if ( str == "strXL"   ) decorator["strXL"  ] = &Props::goodstrXL  ;
else if ( str == "strXXXL" ) decorator["strXXXL"] = &Props::goodstrXXXL;

或类似的东西。
它不一定是在vim!我只是将它标记为vim,因为这是我通常使用的。请推荐其他可以完成这项工作的工具。

1 个答案:

答案 0 :(得分:3)

我知道实际上有一种工具可以帮助调整所有这些"丑陋"块。它被称为Align。你所要做的就是给他一个你想要对齐的模式。

所以对于上面的代码,你可以这样做:

:%normal! ggJ
:%s/;/;\r/g
:%left
:AlignCtrl =Clp1P1IW 
:% Align (\|)\|]\|[\|&.\+ 
:% Align ;

从第5个命令可以看出,您需要通过提供模式

手动重新组织代码

结果:

if      ( str == "str"     ) decorator [ "str"     ] = &Props::goodstr     ;   
else if ( str == "strM"    ) decorator [ "strM"    ] = &Props::goodstrM    ;   
else if ( str == "strXL"   ) decorator [ "strXL"   ] = &Props::goodstrXL   ;   
else if ( str == "strXXXL" ) decorator [ "strXXXL" ] = &Props::goodstrXXXL ;