很抱歉,如果之前已经回答了这个问题,但我看起来非常努力,找不到足够简单的答案(没有环绕声)。 我想用逗号分隔的列表替换所有“ROUTE:”行后跟一个或多个分隔的数字,并将其更改为括号。
{
"siteid": 17994,
"ROUTES": "11 10 59 17 25 18",
"ROUTEDIRS": "11:NB,10:NBNB,59:NB,17:EB,25:NB,18:NB",
}
到此:
{
"siteid": 17994,
"ROUTES": [11, 10, 59, 17, 25, 18],
"ROUTEDIRS": "11:NB,10:NBNB,59:NB,17:EB,25:NB,18:NB"
}
我已经尝试了各种组合,但是我可以解决的ROUTES选择线(实际上有15种不同的键/值),但是使用括号很难。我最初的方法是在所有ROUTES之后将两条新线分开,但是我仍然遇到了支架问题。所有其他问题都提示插件。 谢谢你的帮助!
答案 0 :(得分:2)
完全按照您的建议行事:
:g/ROUTES/s/:\s*\zs/\r/|s/"/[/|s/"/]/|s/\s\+/, /|-j
步骤:
:g/ROUTES/{cmd}
s/:\s*/\r/
s/"/[/|
s /" /] /`s/\s\+/, /
-join
或者,您可以使用sub-replace-expression:
:g/ROUTES/s/:\s\zs"\(.*\)"/\='['.join(split(submatch(1), '\s\+'), ', ').']'
如需更多帮助,请参阅:
:h :g
:h :s
:h /\zs
:h :j
:h :range
:h sub-replace-expression
:h split()
:h join()
:h submatch()