2013-05-28 55 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 

視覺選擇你想要做搜索的內容,然後按明星關鍵*,瞧!