【问题标题】:Vim - Capture strings on Search and use on ReplaceVim - 在搜索时捕获字符串并在替换时使用
【发布时间】:2013-03-27 15:44:17
【问题描述】:

我有一个 CSS 选择器,例如:

#page-site-index .toolbar .items {

如何捕获“.toolbar .items”部分并将其用于 Vim S&R 的 Replace 部分,所以这个选择器可以变成:

#page-site-index .toolbar .items, #page-site-login .toolbar .items {

类似:

%s:/#page-site-index \(.toolbar .items\)/#page-site-index (the captured string), #page-site-login (the captured string)/g

顺便说一句,我使用的是终端版本的 Vim。

【问题讨论】:

    标签: bash search vim replace


    【解决方案1】:

    使用\1...在此处查看维基:http://vim.wikia.com/wiki/Search_and_replace

    更明确地说:

    %s:/#page-site-index \(.toolbar .items\)/#page-site-index \1, #page-site-login \1/g
    

    【讨论】:

    • 谢谢!我只需要将 (.toolbar .items) 更改为 (.\+),但您的回答为我指明了正确的方向。
    • 括号需要反斜杠
    • 总结一下:如果你想把 foobarbaz, fooquxbaz, fooanythingbaz 替换成 bar, qux, 任何东西,做 :%s /foo(.\+)baz/\1/g
    【解决方案2】:

    在你的 vim 中试试这个命令:

    %s/\v#(page-site-index )(\.toolbar \.items)/&, #page-site-login \2/g
    

    您也可以使用 \zs, \ze 并且不分组:

    %s/#page-site-index \zs\.toolbar \.items\ze/&, #page-site-login &/g
    

    继续打高尔夫球,如果文字与您提供的内容一样,您可以:

    %s/#page-site-index \zs[^{]*\ze /&, #page-site-login &/g
    

    【讨论】:

      【解决方案3】:

      在您的尝试中,您已经通过\(...\) 对正则表达式的有趣部分进行了分组。要在替换部件中引用这些捕获的子匹配,请使用\1\2 等,其中数字指的是第一个(打开的)捕获组,从左到右。整个匹配文本还有\0 == &。请参阅:help /\1 了解更多信息。

      【讨论】:

        【解决方案4】:

        首先输入: 进入命令模式。然后发出以下命令:

        %s/#page-site-index .toolbar .items/#page-site-index .toolbar, #page-site-login
        .toolbar .items/
        

        不要关心格式,这是因为stackoverflow markdown解析器......

        【讨论】:

        • 谢谢,但是这个文件中还有很多其他选择器,我想用一个命令替换它们。
        • 是的,这是针对该问题的。需要查看整个文件才能给出一般性答案。
        猜你喜欢
        • 2014-06-16
        • 1970-01-01
        • 2011-05-20
        • 2015-11-13
        • 1970-01-01
        • 2016-07-12
        • 1970-01-01
        • 2017-01-10
        • 2017-04-16
        相关资源
        最近更新 更多