只是一个随机的例子:
aaa 01 02 03 04 05
“aaa”后面的数字个数不固定。替换后的预期结果是:
aaa 01
aaa 02
aaa 03
aaa 04
aaa 05
我知道如何使用 sed 的“t label”或 Vim 使用类似命令来制作它
:%s/\v%(^(\a+) .{-})@<= (\d+)/\r\1 \2/g
但我想知道 Vim 是否有一种递归方法来处理这个问题。
使用 vim 替换 (:s
)
1 Using :s
并确认完成工作:
:%s/\s\+/\raaa /gc
当 vim 要求你确认时,你按n
then a
.
2 vim 中的调用函数:s
命令:
%s/\v((\S+)\s+\S+)(.*)/\=submatch(1).substitute(submatch(3), '\s\+',"\r".submatch(2)."&",'g')
上面的命令看起来很长,但是非常简单。
使用 vim 宏
如果我是你,我会用 vim 中的宏来完成。就我个人而言,我觉得这将是“vim”方式:
假设示例中的行位于 line1,并且光标位于第一列。您按:
qqyw2f<Space>i<Enter><Ctrl-r>"<Esc>0q
录制宏并将其保存在q
登记。接下来,您可以将宏重播 x 次,例如:
99@q
看看 vim 是如何完成这项工作的。完成这项工作的击键总数将少于 20 次。
看起来像:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)