【问题标题】:Vim - Find pattern on currently line ONLYVim - 仅在当前行上查找模式
【发布时间】:2013-05-15 18:37:06
【问题描述】:

我想知道是否有办法找到模式,但将其限制在当前行。基本上相当于/PATTERN,但仅限于当前行,而不是整个文档。

我试过:s/PATTERN,但这会从行中删除模式并将光标放在行的开头,这根本不是我需要的。我希望您无需替换即可搜索...

我希望将它用于宏,以便将光标放在该模式的开头,就像在整个文件上执行 /PATTERN 时那样,所以任何对宏友好的东西都更好.

那里有任何可能有想法的 vim 用户吗?

编辑:宏中的0/PATTERN 可以满足我当前的需求,但我希望有一种更具体的方法来限制搜索。

回答:到目前为止,这里已经发布了几种方法,但我现在最喜欢的一种方法是使用Shift+V 直观地选择当前行,然后使用/\%V 仅在视觉选择中搜索。然后Shift+V 再次将关闭可视模式。

【问题讨论】:

  • 我对宏的了解有限,但是交互方式可以Shift + V选择当前行,然后/search
  • 那行得通。如果您想将其发布为答案,我可以接受。我做了Shift+V/\%VPATTERN,它正在工作

标签: vim macros


【解决方案1】:

我对宏的了解是有限的,但是交互的,你可以用Shift + V选择当前行,然后/\%Vsearch(见http://vimdoc.sourceforge.net/htmldoc/pattern.html#/\%V)。

【讨论】:

  • 这可能是我最喜欢的。我不知道 \%V 在正常/搜索中工作!对限制搜索空间会很有帮助。
  • 这不适用于所有情况。和/search没有视线模式的差不多
  • @PeterRincker 可以举一个例子或一个来源,我可以在其中找到这不起作用的案例?
  • @snap,我在这里太仓促了。我相信这是一个很好的方法。对于跨越视觉边界的模式可能会很棘手。虽然,我怀疑这对于这样一个有限的案例来说会是一个问题
【解决方案2】:

尝试通过键入来查找模式的第一个字符

f <letter>

这不是您所需要的,但可以帮助解决问题。

【讨论】:

    【解决方案3】:
    /\%9lsearch
    

    \%9 表示第 9 行。

    输入行号仍然有点蹩脚。您可以 ctrl+r= 后跟 vim 表达式,然后 enter 来评估 vim 表达式并插入其输出. line('.') 将返回光标所在的行。

    一步到位

    /\%<c-r>=line('.')<cr>lsearch
    

    如需更多帮助,请参阅:

    :h /\%l
    :h i_CTRL-R
    

    【讨论】:

    • 你能扩展一下吗?我已经尝试过了,我 100% 确定我没有正确输入它。也许展示这种单步方法是如何工作的?看起来很有帮助,但我无法使用它。
    【解决方案4】:
    1. 将光标放在要搜索的行上
    2. shift+v 选择它
    3. 输入 / 开始搜索
    4. 在您的术语前加上\%V,例如\%Vabc 仅在视觉选择的块中搜索abc(在我们的例子中为单行)

    【讨论】:

      【解决方案5】:

      你可以不用替换就可以搜索

      :s/PATTERN//gc
      

      然后按 n 跳过替换。如果没有找到模式,你甚至不会被问到。

      您也可以只突出显示当前行或行范围。

      【讨论】:

      • 缓冲区必须是可修改的才能使其工作,因此它不能在例如内置帮助中工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      相关资源
      最近更新 更多