【问题标题】:Interactive search/replace regex in Vim?Vim中的交互式搜索/替换正则表达式?
【发布时间】:2010-10-05 02:03:53
【问题描述】:

我知道进行全局替换的正则表达式,

     %s/old/new/g

您如何在Vim 中进行交互式搜索替换?

【问题讨论】:

    标签: regex vim


    【解决方案1】:

    Neovim 现在有一个功能inccommand 允许您预览替换:

    inccommand 有两种选择:

    • set inccommand=split 在拆分窗格中预览替换
    • set inccommand=nosplit 预览活动缓冲区中的替换

    图片取自:https://medium.com/@eric.burel/stop-using-open-source-5cb19baca44d 功能文档:https://neovim.io/doc/user/options.html#'inccommand'

    【讨论】:

    • 这是一个很酷的nvim 内置功能,很高兴知道!感谢分享!
    【解决方案2】:

    添加标志 c(在 vim 命令提示符中):

    :%s/old/new/gc
    

    每次出现“旧”时都会给您一个是/否提示。

    一旦选择了确认替换,Vim 的内置帮助会提供有关可用选项的有用信息。使用:

    :h :s
    

    然后滚动到确认选项部分。截图如下:

    例如,要替换此匹配项和所有剩余匹配项,请使用 a

    【讨论】:

    • +1,我今天学到了新东西! vim 有很多隐藏的秘密.. :)
    • 学习 vim 命令有点像玩 Nethack。你永远不知道一个角色会拥有什么奇迹。
    • 我想“c”代表“确认”
    • 老实说,我并不想给人留下刻薄的印象,但所有这些都可以通过执行 ":help :s" 找到,这会直接引导您进入 ":help :s_flags"。
    • @jeremy:这需要知道帮助命令的存在,并且知道需要键入“冒号 s”开关才能进入相关的帮助文件。一个人如何或从哪里学到这一点?
    【解决方案3】:

    如果您的替换文本需要更改每个匹配的匹配项(即不是简单地选择是/否来应用单数替换),您可以使用我制作的名为 interactive-replace 的 Vim 插件。

    【讨论】:

      【解决方案4】:

      如果您只想计算“abc”的出现次数,那么您可以使用%s/abc//gn。这不会替换任何内容,只会报告“abc”的出现次数。

      【讨论】:

        【解决方案5】:

        Mark Biek 指出使用:

        %s/old/new/gc
        

        对于全局搜索,每个替换都用确认替换。但是,我也喜欢以交互方式验证旧文本是否正确匹配。我首先使用正则表达式进行搜索,然后重用该模式:

        /old.pattern.to.match
        %s//replacement/gc
        

        s// 将使用最后一个搜索模式。

        【讨论】:

        • 使用/学习 vim 最棒的事情之一就是兔子洞有多深!
        • 很好,我一直在进行搜索,然后使用 / 将最后一个搜索粘贴到替换命令中。
        • 正是我想念的 Sublime Text!
        • 这个答案特别有用,因为我想很多时候你决定替换一个单词的实例,它就是你刚刚搜索的单词。
        【解决方案6】:

        我认为你正在寻找c,例如s/abc/123/gc,这将导致VIM 确认替换。请参阅 :help :substitute 了解更多信息。

        【讨论】:

          【解决方案7】:

          我通常使用 find/substitute/next/repeat 命令:-)

          /old<CR>3snew<ESC>n.n.n.n.n.n.n.
          

          那是find "old"substitute 3 characters for "new"find nextrepeat substitute,等等。

          大量替换很痛苦,但它可以让您有选择地忽略一些旧的出现(只需再次按n 来查找下一个而不是. 来重复替换)。

          【讨论】:

          • 我也用这个,即使是类似的文本。 (3cW...)
          • 这不是反模式!好可爱。并且你可以使用 N 向相反的方向搜索。如果你看到一个单词并想改变它,那真的很好。 *cwNewTextN.n.n. (这将跳离光标下的单词,但在您更改下一个匹配项后立即跳回。
          • &lt;CR&gt; 是什么?
          猜你喜欢
          • 1970-01-01
          • 2015-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-09
          • 2019-11-03
          • 2013-06-14
          相关资源
          最近更新 更多