视觉块替换vim

时间:2018-04-13 12:58:45

标签: vim neovim

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

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

我正在尝试使用可视块选择,选择带注释的块。然后我尝试使用像这样的替换::'&lt;,'&gt; 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

谢谢。

2 个答案:

答案 0 :(得分:1)

不幸的是,只需一个简单的替换命令就可以很容易地进行对齐,因为插入或删除的空格量会逐行变化。

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

缩进评论

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

答案 1 :(得分:0)

您也可以使用宏来实现这一目标。

假设光标在正常模式下位于第一行,则: j qa0f;10a [Esc]32|dwjq 5@a 应格式化所有行。

这个宏的工作方式是:

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

希望这有帮助。