gpt4 book ai didi

vim - 在 Vim 中重新排序数据

转载 作者:行者123 更新时间:2023-12-02 05:45:02 25 4
gpt4 key购买 nike

我有一个分层列表,像这样

Menu1,SubMen1.1,SubMen1.2,SubMen1.3
Menu2,SubMen2.1,SubMen2.2,SubMen2.3
Menu3,SubMen3.1,SubMen3.2,SubMen3.3

我想运行一个脚本或宏来重新排列信息

Menu1,SubMen1.1
Menu1,SubMen1.2
Menu1,SubMen1.3
Menu2,SubMen2.1
Menu2,SubMen2.2
Menu2,SubMen2.3
...

有什么办法可以做到这一点吗?

编辑:

我应该说所有的行都有不同的长度。有些只有一项,有些则有八项。

在一个文件中也有大约 4,000 个。我还有大约 20 个文件要处理。

最佳答案

有一个similar question on reddit几天前,the solution posted there by sylvain_soliman似乎也适用于这种情况。我将它张贴在这里只是为了展示解决问题的不同方法。

:%s/\(^\([^,]*\),.\+\)\@<=,/\r\2,/g

为了使其更具可读性,请使用 \v :

:%s/\v(^([^,]*),.+)@<=,/\r\2,/g

一点解释:

  • :%s/ - 替换缓冲区中的所有行
  • \v - 使用“非常神奇”的正则表达式语法(防止转义括号之类的东西)
  • (^([^,]*),.+) - 匹配行首的字符串,后跟一个逗号,再后跟至少一个字符。这将从行的开头到匹配组 2 中的逗号放置字符串。
  • @<= - 告诉 vim 以零宽度匹配前一组,因此不会被替换。
  • , - 匹配下一个逗号。
  • /\r\2,/g - 用换行符和匹配组 2 中的字符串替换上面的逗号。

关于vim - 在 Vim 中重新排序数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10395274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com