2013-05-28 57 views
2

当我使用VIM读取日志文件时,我想要搜索多个单词,因此更简单的方法是直观地选择这些单词,然后按一个键以便VIM可以搜索我选择的单词。从视觉搜索在VIM中选择?

但如何做到..?

非常感谢

+0

按照与所选单词相同的顺序搜索单词,作为句子或选择的任何单词?即选择'foo被命名为bar'并使用它进行搜索,只会找到相同的句子,而不是包含'the/foo/was/named/bar'的句子? – timss

+0

你的意思是像'*'? – Kevin

+0

@timss:是的,搜索确切的选择; – songyy

回答

5

这已经Search for selection in vim解释。

  1. 使用视觉选择(例如, v
  2. 进行粘贴,y
  3. 搜索,/
  4. 使用<C-r>0按Ctrl[R + )
    实际上插入从寄存器0的内容最后抽出的文本粘贴,见:h i_ctrl-r(感谢到romainlcomments

另一个示例是使用命令行:

  1. 使用视觉选择(例如, v
  2. 猛拉它,y
  3. 输入命令行模式与编辑Ex命令,q/
  4. 粘贴抽出的文本,p,并通过按压Enter

在短搜索:yq/p<Enter>

+0

我似乎无法找到'Ctrl-r 0'的真正含义,只不过它粘贴了最后一个被抽出的文本。 ':h Ctrl-r'告诉我它和'redo'有关,但是这样吗?任何人都可以解释这是如何工作的,或者如果没有重做,可能会将我指向正确的帮助部分? – timss

+2

在插入模式下,' 0'用于插入寄存器0的内容。您还可以插入表达式的结果:' = 2 + 57 ',' = expand('%')'等。阅读':h i_ctrl-r'。注意插入模式命令的'i_'。 – romainl

+1

@romainl谢谢。我也更新了我的答案。 – timss

0

要一次搜索多个单词,vim搜索支持或'\ |'。因此,寻找狗猫,鸟,您可以:

/dog\|cat\|bird 

或更好(确切的词匹配):

/\<dog\>\|\<cat\>\|\<bird\> 
2

柏瑞/大湖的SearchParty有几个漂亮的映射是建立在“使劲并插入”的方法,但用换行和清洁处理这样的:

* Searches for the next occurrence of the currently selected visual text. 

# Searches for the prior occurrence of the currently selected visual text. 

& Starts a :substitute using the currently selected visual text. 

如果你觉得一个插件是矫枉过正,很容易从脚本拉动相关行,然后把它放在你的~/.vimrc

0

哦,伙计,其实你可以使用最初由书实用的Vim笔者强大视觉搜索。它非常轻便!

只需添加下面的东西到你的vimrc,

xnoremap * :<C-u>call <SID>VSetSearch()<CR>/<C-R>[email protected]/<CR><CR> 
xnoremap # :<C-u>call <SID>VSetSearch()<CR>?<C-R>[email protected]/<CR><CR> 

function! s:VSetSearch() 
    let temp = @s 
    norm! gv"sy 
    let @/ = '\V' . substitute(escape(@s, '/\'), '\n', '\\n','g') 
    let @s = temp 
endfunction 

视觉选择你想要做搜索的内容,然后按明星关键*,瞧!