【问题标题】:Vim whole word search - but fasterVim 全词搜索 - 但更快
【发布时间】:2011-01-22 15:11:28
【问题描述】:

我知道要在 vim 中搜索整个单词,您需要输入:

/\<word\><CR>

现在,我想做的是将此行为映射到 ? (因为我从不向后搜索,如果需要,我可以向前搜索然后 NN)。 IE。我想输入:

?word<CR>

和上面的结果相同(vim 搜索整个单词)。几个星期以来,我一直在摆弄 vim 命令和映射,但我不确定如何完成这个。感谢您的帮助。

更新:(而不是?我现在使用 \)。

【问题讨论】:

    标签: search vim mapping command


    【解决方案1】:

    我倾向于使用 *#(如 Brian Agnew 建议的那样),但如果您想要一种涉及打字的方法

    ?word<CR>
    

    你可以这样做:

    function! SearchWord(word)
        let @/ = '\<' . a:word . '\>'
        normal n
    endfunction
    command! -nargs=1 SearchWord call SearchWord(<f-args>)
    nmap ? :SearchWord 
    

    注意最后一行SearchWord后面有一个空格。

    说明:

    映射将使? 打开命令提示符并键入SearchWord(包括空格)。该命令使SearchWord mywordcall SearchWord('myword') 等效(即,它在参数周围加上引号以使其成为字符串)。该函数将搜索寄存器@/ 设置为等于\&lt;\&gt; 包围的单词,然后执行正常模式n 以查找搜索寄存器内容的下一个实例。

    如果你这样做,你当然会失去增量搜索的好处,但希望它还是有用的。

    【讨论】:

      【解决方案2】:

      您可以使用*#(向前和向后)搜索光标下的单词。 g*g# 将执行相同的操作,但会查找 包含最初光标下的内容的单词。

      显然(!)您需要已经找到第一个实例才能使其工作,但它对于连续搜索非常有效。

      【讨论】:

      • 谢谢,我应该提到我已经知道这种可能性 - 当单词已经在光标下时当然更可取。
      【解决方案3】:

      Al's solution 很不错,但是输入\&lt;\&gt; 模式,然后将光标向后移动两次不是更简单吗?这对我有用:

      nmap ? /\<\><Left><Left>
      

      这样你仍然可以获得增量搜索(有点)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多