2013-04-09 234 views
2

使用記事本++搜索字符串時,將打開新窗口並顯示查找 結果。我想在vim中使用這個功能。谷歌搜索後,我發現了一些建議:如何在vim中顯示搜索的所有結果

vimgrep /<pattern>/ % 
copen 

這是可能的創建映射,執行這兩個命令。模式應該是當前的詞語:可能是vim中的cword關鍵字?

+0

請注意,如果您執行'vimgrep ...%',它可能無法在unamed緩衝區上工作。 – Kent 2013-04-09 15:40:42

回答

3

要求實際上是很容易。但要獲得用戶輸入模式,您需要一個功能。

function! FindAll() 
    call inputsave() 
    let p = input('Enter pattern:') 
    call inputrestore() 
    execute 'vimgrep "'.p.'" % |copen' 
endfunction 

,如果你想有一個映射,加入這一行:

nnoremap <F8> :call FindAll()<cr> 

但我你的問題下評論。 %可能不適用於未知的緩衝區。

+0

非常感謝。我可以使用鼠標瀏覽搜索結果嗎?即點擊 |瀏覽搜索結果。 – 2013-04-09 15:54:11

+1

@VardanHovhannisyan爲鼠標操作..我不知道,我很少使用鼠標時,我與vim。但是當我有時間時我可以檢查你。對於光標下的單詞。在命令行中按''會給你..實際上sehe在他的回答中有這個。 – Kent 2013-04-09 16:17:19

+0

@VardanHovhannisyan雙擊quickfix窗口中的條目將跳轉到此處。我在''.vimrc'中設置了鼠標= a' – Kent 2013-04-09 20:12:10

2

我建議lvimgrep(這樣你就可以使用的quickfix:讓)

:nnoremap <F6> :lvimgrep /\M\<<C-R><C-W>\m\>/ **/*.[ch]pp **/Makefile | lopen<CR> 

此外,如果你只是想在當前文件中找到:

:g/<pattern>/ 

將調用「打印'(默認命令)在每個匹配行上。

:v//    " non-matching lines 
:g//-1    " lines preceding the matching line 
:g//-1,+1   " lines around the matching line 

:全球是更爲有用:

:g/foo/ join  " join all lines containing foo 

+0

感謝您的幫助。我嘗試了,但它給出了錯誤信息: 處理/home/student/.vimrc時發現錯誤: line 30: E488:尾隨字符:lopen 2013-04-09 15:37:12

+0

我使用':number'(或':nu'簡稱)與':g'相結合,相當不錯。 – 2013-04-09 16:41:29

+0

@PeterRincker我選擇的武器會更短:':g //#' – sehe 2013-04-09 17:48:50

1

這兩個命令可以縮短和鏈接::vim foo %|co。你可以像這樣在光標下面拉字::vim <C-r><C-w> %|co

這裏是一個快速正常模式映射,您可以使用列出的單詞的所有出現在quickfix窗口的光標下:

nnoremap <F6> :vimgrep /<C-r><C-w>/j % <bar> cwindow<cr> 

您還可以使用:il[ist] foo顯示列表在foo[I的所有匹配項中,爲您的光標下的單詞顯示相同的列表。

當列表顯示時,使用:{line number}跳轉到相應的行。