【问题标题】:vi search copy paste search copyvi 搜索复制粘贴搜索复制
【发布时间】:2010-11-05 13:39:49
【问题描述】:

我只是想知道是否有人可以帮助解决如何使用 vi 执行以下操作。

我有一个文本文件,它可能包含类似的内容

start of text file:
--something1.something2--
--anotherThing1.something2--
end of text file:

如果我想获取这一行并通过搜索与[A-Za-z0-9] 的第一次出现匹配的任何内容来转换它,请将其复制到缓冲区中,然后将其附加到同一行上的第一次出现之前--

start of text file:
--something1.something2.something1--
--anotherThing1.something2.anotherThing1--
end of text file:

是否有一个 VI 命令可以执行此操作?

干杯 本

【问题讨论】:

  • 所以你想复制'--'之后的第一个单词到第一个'.'并附加“。”以及在最后一个“--”之前找到的单词?

标签: search vim copy vi paste


【解决方案1】:

天哪,在我登录发布该答案的时间里,你发布了它并且已经得到了评论!

%s/--\(\w*\)\.\(.*\)--/--\1.\2.\1--/g

--ab1.cd2..yz99---> --ab1.cd2..yz99.ab1--

【讨论】:

    【解决方案2】:
    :%s/--\([a-zA-Z0-9]*\).\(.*\)--/--\1.\2.\1--/gc
    

    或者每次替换都不要求确认:

    :%s/--\([a-zA-Z0-9]*\).\(.*\)--/--\1.\2.\1--/g
    

    将产生:

    --something1.something2.something1--
    --anotherThing1.something2.anotherThing1--
    

    来自:

    --something1.something2--
    --anotherThing1.something2--
    

    这是如果您想将“--”之后的第一个单词复制到第一个“.”。并附加“。”以及在最后一个“--”之前找到的单词。

    使用 vim。

    重新评论:

    有人提到当有多个单词时它会不起作用等等。 我在以下方面对其进行了测试:

    start of text file:
    --something1.something2.something3.something4.something5.something6--
    --anotherThing1.something2.anotherThing3.anotherThing4.anotherThing5--
    end of text file:
    

    用上面的表达式替换后:

    start of text file:
    --something1.something2.something3.something4.something5.something6.something1--
    --anotherThing1.something2.anotherThing3.anotherThing4.anotherThing5.anotherThing1--
    end of text file:
    

    【讨论】:

    • 如果您不想被要求确认每次替换,请从末尾删除“c”。
    • 不需要正则表达式的 /g 修饰符。如果在一行中多次出现 --text.text--,则您的正则表达式不起作用。
    • --text.text-- 是什么意思...你有失败的例子吗?
    • 你们是真正伟大的炸弹。我通常会做一些不同的替换。 :g/--([A-Za-z0-9]*).(.*)--/s//--\1.\2.\1--
    • 真的很喜欢小组不确定你能不能做到谢谢你的帮助
    【解决方案3】:

    基于 stefanB 的解决方案,但使用否定字符类和“非常神奇”设置,我得到以下替换命令:

    :%s/\v--([^.]+)\.(.*)--/--\1.\2.\1--/
    

    根据具体要求(“something1”和“anotherThing1”允许使用哪些字符),这可能更正确,也可能不正确。

    需要考虑的另一件事:到目前为止发布的所有解决方案都假定每行仅出现一次“--text.someOtherText--”模式。如果不是这种情况,则 (.*) 部分必须调整模式并且需要 /g 修饰符。

    【讨论】:

    • 我实际上已经测试了多个片段,例如“--anotherThing1.something2.anotherThing1.anotherThing1.anotherThing1--”,它仍然会在最后一个单词之前添加第一个单词--
    【解决方案4】:

    试试这个:

    %s:\([A-Za-z0-9]\+\)\(\..\+\)--:\1\2.\1--:g
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多