找到每个第三个值并在VIM中插入cr或换行符

Joh*_*ann 4 python vim

所以我有几个大型数据集,我需要使其更具可读性,目前我必须进入并移动到每个第3个值并插入换行符.我已经在VIM中尝试了几个方法来实现这一点,但似乎没有一个能够返回我正在寻找的价值.这是我的一些数据:

(0.96260310749184663, 4.3830008206495812, 0.84922658632317849),
(0.96260310749184663, 5.0000002088986637, 1.049701855818201),
(0.96260310749184697, 5.6169993576359696, 0.8492264385213405),
(0.96260310749184719, 5.9983257940402384, 0.32437568665165911),
(0.96260310749184719, 5.9983258053918069, -0.32437572732698844),
(0.96260310749184719, 5.6169994358349786, -0.84922691097323821),
(0.96260310749184697, 5.0000000093711492, -1.0497019267383632)
Run Code Online (Sandbox Code Playgroud)

我需要做的是让它看起来像这样:

(0.96260310749184663, 4.3830008206495812, 
 0.84922658632317849),
(0.96260310749184663, 5.0000002088986637, 
 1.049701855818201),
(0.96260310749184697, 5.6169993576359696, 
 0.8492264385213405),
(0.96260310749184719, 5.9983257940402384, 
 0.32437568665165911),
(0.96260310749184719, 5.9983258053918069, 
 -0.32437572732698844),
(0.96260310749184719, 5.6169994358349786, 
 -0.84922691097323821),
(0.96260310749184697, 5.0000000093711492, 
 -1.0497019267383632)
Run Code Online (Sandbox Code Playgroud)

我在选择中使用它来尝试让它将第三个值向下移动,但它复制了整个事物,然后将整行移动:

:'<,'>s/\([-[0-9.]\+,\s[-[0-9.]\+,\)/\1\r&/g
Run Code Online (Sandbox Code Playgroud)

我也尝试删除1以使其工作,但这也不起作用.那么有什么方法可以捕获第三个值并插入回车符或换行符来使其工作?谢谢.

编辑 - -

我为错误沟通我的部分问题而道歉:顶部的数据全部在一行,而不是几行.它看起来像这样:

(0.31852533878680489, 0.10352149350126813, -0.0046069731261429991), (0.31852526554320226, -0.103521543762028, -0.0046069731261429991), (0.19682845687859715, -0.27102285045297636, -0.004606973126142444), (-8.1184530326649769e-05, -0.33500267513407755, -0.0046069731261416669), (-0.19699089317458821, -0.27102292369657782, -0.0046069731261408897), (-0.31868770183919259, -0.10352150714022559, -0.0046069731261403346), (-0.31868770183919221, 0.10352156674487166, -0.0046069731261403346), 
Run Code Online (Sandbox Code Playgroud)

seh*_*ehe 5

两种方法

1. ex命令和格式

我的第一个想法是textwidth:

:se tw=50
:g/./norm! gqq
:%s/^[^(]/ &/g
Run Code Online (Sandbox Code Playgroud)

这个

  1. 将文本宽度设置为50个字符
  2. 重新格式化每个(非空)行
  3. 在任何不以该行开头的行的开头插入一个空格 (

2.使用宏

或者:制作一个宏

gg
qq2f,a<CR><Esc>j0q
100000@q
Run Code Online (Sandbox Code Playgroud)

理由:

  1. 去开始缓冲
  2. 录制宏q(qq开始录制,q结束录制)
    • 2f, - 转到第二个逗号
    • a<CR><Esc> - 追加换行符
    • j0 - 下一行,将插入符号移到第一个字符
  3. 冲洗并重复(100000是重复的次数;处理将在宏发生故障时停止(例如在文件结束时)


Pet*_*ker 5

:g/./norm! 2Wi^M
Run Code Online (Sandbox Code Playgroud)

说明:

  • :g/./{cmd}{cmd}在每一行上运行
  • norm! 将执行以下字符串作为普通模式命令
  • 2Wi^M移动2 WORDS然后插入一个返回
  • ^M通过按<c-v><cr>或完成<c-q><cr>.

这是非常诱人的%norm! 2Wi^M,但是这会失败,因为它弄乱了正在处理的线条.

  • 只需添加替换并删除最后一行.`:S /),\ S*/),\ R/G | $ D_ | G /./规范!2Wi ^ M` (2认同)