【问题标题】:Vim:inserting regex matches to beginning of the lineVim:插入正则表达式匹配到行首
【发布时间】:2020-01-15 21:51:47
【问题描述】:

最近发现了 vim。 我有一个格式为

的行列表

<title>-<course name>p.<optional space><part number><extra text>.mp4

我想将零件名称放在文件的前面,即它应该像这样结束

p.<part number><title>-<course name><extra text>.mp4

我知道使用编程语言很简单,但我想知道如何在 vim 中做到这一点。 在这条线下面是我到达的地方,但 \1 似乎没有附加该组。

:g/\(p\.\s\=[0-9]*\)/s/^/\1

根据突出显示的内容,我很确定正则表达式是正确的,但我只是想知道我应该如何将它插入到每行的开头。 下面的示例文件名,以防我的解释不清楚:

titleofvideo -coursename p.13-44jq6ano5n0.mp4

我想改成

p.13-titleofvideo -coursename -44jq6ano5n0.mp4

【问题讨论】:

  • 我认为最简单的方法是匹配两个部分然后交换它们::%s/\v(.*)(p\.\s?\d+)/\2-\1
  • 这很好用,谢谢。

标签: regex vim


【解决方案1】:

@L3viathan 在 cmets 中给出以下工作命令:

%substitute/\v(.*)(p\.\s?\d+)/\2-\1/

OP 的命令不起作用的原因是因为在 s/^/ 之后,之前的正则表达式中没有组(现在是 ^ 而不是 global 模式)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2015-08-20
    相关资源
    最近更新 更多