我有一长串代码需要分成不同的行:
Method(new Namespace::ClassName(LongParameterName1, LongParameterName1, LongParameterName3));
我想通过以下方式拆分它:
Method(new Namespace::ClassName(LongParameterName1,
LongParameterName1,
LongParameterName3));
正则表达式将如下:
s:, :,\r :
如何设置使用的空格数(如果可以的话)?
注意:我有相当多的这样的行,这就是我想使用正则表达式的原因。
答案 0 :(得分:2)
您可以在以下行中计算要开始变量名称的位置,并使用带表达式的替换命令,如:
:let c = strridx(getline('.'), '(')
:s/\v(,)/\=submatch(1) . "\r" . printf("%" . c . "s", " ")/g
我在两条指令中写了它们以避免Markdown滚动,但你可以用管道符加入它们。
第一条指令搜索最后一个开括号的位置(从结尾开始的第一个)。第二条指令使用printf()
在换行符之后插入该数量的空格。
它产生:
Method(new Namespace::ClassName(LongParameterName1,
LongParameterName1,
LongParameterName3));
要多次重复此任务,您可以将这些指令包装在函数中,并从:g
命令调用它们。我希望你明白这一点。
答案 1 :(得分:1)
我该怎么做:
qa
')搜索下一个','(<escape>\,
),跳转到编辑模式并按Enter(i<enter>
),退出录制宏( q
)@a
然后@@
)qa
'):I
然后按<space>
直到您的参数被充分标记,并移至下一行替换第一个角色(<escape>j^
)上的光标,退出录制宏(q
)@a
然后@@
)看起来不像正则表达式那么优雅,但恕我直言,当它完成任务时,是时候完成任务了:)
答案 2 :(得分:1)
我先使用正则表达式然后缩进。例如......
s:, :,\r:g
V?Method<cr><cr>8>
在实际操作中,我可能会使用>.......
代替8>
,因为它可以让您看到缩进的数量。