视觉块替换 vim

Visual Block Substitution vim

我想在下一段代码的每行末尾缩进注释:

Point d_test = Point(5,-1);    //inCircle > 0
Point e_test = Point(5,-1);  //inCircle > 0
Point f_test = Point(5,-1); //inCircle > 0
Point g_test = Point(4,-5); //inCircle = 0
Point h_test = Point(3,-2); //inCircle < 0
Point i_test = Point(5,0); //inCircle < 0
Point j_test = Point(5,0); //inCircle < 0

我正在尝试使用可视块选择,选择带有注释的块。然后我尝试使用这样的替换::'<,'>s/\%V^\s+\%V//g

我已经尝试了几次但没有成功 :( 。我敢打赌有更好的方法来做到这一点。

我要找的最终结果是:

Point d_test = Point(5,-1);   //inCircle > 0
Point e_test = Point(5,-1);   //inCircle > 0
Point f_test = Point(5,-1);   //inCircle > 0
Point g_test = Point(4,-5);   //inCircle = 0
Point h_test = Point(3,-2);   //inCircle < 0
Point i_test = Point(5,0);    //inCircle < 0
Point j_test = Point(5,0);    //inCircle < 0

谢谢。

不幸的是,仅使用简单的替换命令无法轻松实现对齐,因为要插入或删除的空格量逐行变化。

我特别喜欢用vim-easy-align来解决这个问题,你可以使用:EasyAlign /\/\// {'ig': []}

缩进注释

编辑:Easy Align 默认忽略注释。因此,要对齐注释,您必须实际更改 ignore_groups 参数。更新了答案以反映这一点。

您也可以使用宏来实现。

假设在普通模式下光标在第一行,那么: j qa0f;10a [Esc]32|dwjq 5@a 应格式化所有行。

这个宏的工作方式是:

  • qa: 在缓冲区中记录宏 a
  • 0: 移至行首
  • f;:找到;字符
  • 10a [Esc]:插入10个空格,进入普通模式
  • 32|: 将光标移动到第 32 行
  • dw: 删除当前单词(多余的空格到下一个单词)
  • jq: 移动到下一行并完成宏录制
  • 5@a: 应用缓冲区a中记录的宏五次

希望对您有所帮助。