vim如何以这种方式转换文本

时间:2018-01-19 03:05:19

标签: vim

我想在

中的一行中转换以下文字
[12.2,3.3 ,8.1 ,9., 12.4]

5
12.2
3.3
8.1
9.
12.4

或来自

[def,  abc , ghi ]

3
def
abc
ghi

所以,基本上,删除[],打破基于,的元素并删除前导或尾随空格,然后将元素数量作为第一行({{在第一个示例中为1}},在第二个示例中为5,以及以下行中的每个元素。

如何编写命令在vim中快速执行此操作?

2 个答案:

答案 0 :(得分:4)

<强>步骤

1.列表中的空格:

:s/ //g

2.在开头添加元素数量:

:s/\v\[(([^,]+)*[^\]]+)\]/\=len(split(submatch(1), ',')).','.submatch(1)/

3.用,替换\r

:s/,/\r/g

<强>结果

第一步后:

[12.2,3.3,8.1,9.,12.4]

第二步后:

5,12.2,3.3,8.1,9.,12.4

最后一步之后:

5
12.2
3.3
8.1
9.
12.4

答案 1 :(得分:0)

如果您对python(在您的操作系统中安装并在vim中激活)没问题,您可以:

  1. 将文字编辑为: a=[your list];print(len(a)); for x in a:print(x)

  2. 进入视觉模式并选择所有文字

  3. 只需输入:!python即可将您的列表转换为所需的形状,替换原来的

  4. <强> P上。 S。:需要引用字符串才能使其正常工作