【问题标题】:VIM: Search only between specific line numbers?VIM:只在特定的行号之间搜索?
【发布时间】:2011-03-16 21:37:00
【问题描述】:

我知道使用 Vim 的替换命令可以指定一系列行:

:12,24s/search/replace

我也希望能够指定一个正常搜索的范围。类似的东西

:12,24/search

由于这似乎不起作用(至少在我的 Vim 配置中),有人知道如何实现吗?

谢谢。

【问题讨论】:

    标签: search vim


    【解决方案1】:
    :help search-range
    

    然后

    :help /\%>l
    

    本质上是这样的:

    /\%>12l\%<24lsearch
    

    【讨论】:

    • 我看不出这对 Carl 提供的 :start,stop/pattern/s/tgt/repl/ 模式有什么影响。
    • @chernevik:检查答案的时间戳。
    • ^ 对于“正确的方式”。 Vim 可以提供多种方式来完成一项任务。
    • 虽然这绝对是正确且被接受的答案,但 Habi (stackoverflow.com/a/3264324/633910) 的答案实际上对我来说效果更好,大多数时候,视觉范围选择。
    【解决方案2】:

    akira 的回答很好。但经过一番挖掘,我找到了另一种选择。它没有那么优雅但更容易输入:

     :12,24g/search/
    

    这会给你一个烦人的提示,但它会出现在包含搜索字符串的范围内的第一行。

    【讨论】:

    • 这对我有用,没有任何提示烦恼。所以命令 > 将 '# debug' 附加到从 195 到 208 的包含 'print' 的行中,并且只有那些行。可能是版本问题?我正在使用 VIM 7.2.330。
    • 这里是 7.3,上面写着 Press ENTER or type command to continue. 我对 vim 不够精通,无法判断差异可能来自哪里。
    【解决方案3】:

    你真的需要行号吗?另一种方法是直观地选择范围。

    1. 使用 v、V 或其他选择范围
    2. 按 ESC 取消选择范围
    3. 使用/\%Vwhat_to_search 搜索以在先前选择的范围内搜索“what_to_search”。

    这更容易输入,但不是你所要求的直接输入;-)

    见 :help %V

    [编辑] 太好了,我刚刚了解到,在进行搜索后,可以通过选择另一个范围来更改要搜索的范围,按 ESC 并按 n 重复搜索再次取消选择该范围。 Vim 总是能带来惊喜。

    【讨论】:

      【解决方案4】:

      继续使用替换命令,但将 gc 标志附加到您的原始示例中。

      :12,24s/search//gc

      来自:help search-range

      [在一个范围内搜索]使用 带有 'c' 的 ":substitute" 命令 旗帜。

      示例: :.,300s/Pattern//gc

      此命令将从 光标位置直到第 300 行 “图案”。在比赛中,您可以输入 'q' 停止,或 'n' 查找下一个 匹配。

      【讨论】:

        【解决方案5】:

        如果有标记说a和b,那么搜索可以限制在a和b之间的区域

        /\%>'a\%<'bSearchText
        

        这可以用 cmap 来简化

        cmap vmsab /\%>'a\%<'b
        cmap vmscd /\%>'c\%<'d
        

        【讨论】:

          【解决方案6】:

          使用Narrow Region plugin,我们可以打开一个临时缓冲区,其中包含我们需要搜索或更改的范围

          :900,1000NarrowRegion
          

          那我们可以搜索一下

          /thing
          

          或者更改并写回缓冲区

          :%s/this/that/g
          :wq
          

          【讨论】:

            【解决方案7】:

            如果要搜索到文件末尾,请使用 $:

            :3,$s/pattern//gn
            

            这将从 3-d 行搜索到末尾

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-02-15
              • 2021-05-25
              • 1970-01-01
              • 1970-01-01
              • 2016-09-20
              • 2021-12-02
              • 2011-11-12
              相关资源
              最近更新 更多