Vim全字搜索 - 但速度更快

时间:2011-01-22 15:11:29

标签: search vim mapping command

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

/\<word\><CR>

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

?word<CR>

并且具有与上面相同的结果(vim搜索整个单词)。几周以来,我一直在使用vim命令和映射,但我不知道如何完成这个。谢谢你的帮助。

更新:(我现在使用\了。)

3 个答案:

答案 0 :(得分:11)

我倾向于使用*#(由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 myword相当于call SearchWord('myword')(即它将引号括在参数周围以使其成为一个字符串)。该函数将搜索寄存器@/设置为等于\<\>所包围的单词,然后执行正常模式n以查找下一个内容的实例搜索注册。

如果你这样做,你当然会失去增量搜索的好处,但无论如何它都有用。

答案 1 :(得分:8)

您可以使用*#(前进和后退)搜索光标下的字词。 g*g#会做同样的事情,但最初会找到包含光标下的内容。

显然(!)你需要找到第一个用于此工作的实例,但它对于连续搜索非常有效。

答案 2 :(得分:4)

Al's solution非常好,但是只要输入\<\>模式,然后将光标移回两次就不简单了吗?这对我有用:

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

这样你仍然可以进行增量搜索( kinda )。