2009-02-04 65 views

回答

3
" put in your ~/.vimrc file 
    " START search related configs and helps 
    " 
    " ignore case when searching 
    set ignorecase 

    " search as characters are entered, as you type in more characters, the search is refined 
    set incsearch 

    " highlight matches, in normal mode try typing * or even g* when cursor on string 
    set hlsearch 

    " yank those cheat commands, in normal mode type q: than p to paste in the opened cmdline 
    " how-to search for a string recursively 
    " :grep! "\<doLogErrorMsg\>" . -r 
    " 
    " how-to search recursively , omit log and git files 
    " :vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log` 
    " :vimgrep /srch/ `find . -type f -name '*.pm' -o -name '*.pl'` 
    " 
    " how-to search for the "srch" from the current dir recursively in the shell 
    " vim -c ':vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log`' 
    " 
    " how-to highlight the after the search the searchable string 
    " in normmal mode press g* when the cursor is on a matched string 

    " how-to jump between the search matches - open the quick fix window by 
    " :copen 22 

    " how-to to close the quick fix window 
    " :ccl 

    " F5 will find the next occurrence after vimgrep 
    map <F5> :cp!<CR> 

    " F6 will find the previous occurrence after vimgrep 
    map <F6> :cn!<CR> 

    " F8 search for word under the cursor recursively , :copen , to close -> :ccl 
    nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR> 

    " omit a dir from all searches to perform globally 
    set wildignore+=**/node_modules/** 

    " use perl regexes - src: http://andrewradev.com/2011/05/08/vim-regexes/ 
    noremap//\v 
    " 
    " STOP search related configs and helps 
10

使用:set hlsearch將突出顯示黃色的所有匹配項,以便您輕鬆掃描文件進行匹配。這可能不是你想要的東西,雖然,搜索後:摹//則p給你列出匹配

+2

應該是 ':一套hlsearch' 裏沒有 ':hlsearch' 使用。 – 2009-02-04 01:13:30

+0

當你不需要它們時,也可以使用`:nohl`來清除亮點。 – Kos 2014-10-16 08:38:17

178
:g//p 

在其較長的形式:

:global/regular-expression/print 

你可以離開了模式/正則表達式Vim將重新使用之前的搜索詞。

瑣事:grep工具以該命令序列命名。

+65

真棒瑣事! – manifest 2010-06-29 22:11:03

+14

`:g //` - 由於p(rint)是默認操作,因此您可以將其忽略。 – dekeguard 2012-05-06 03:23:23

+3

`:g /`更短! – Sparhawk 2016-11-13 10:28:26

8

詳細闡述一下該...而不是

/example 
:g//p 

你也可以直接寫

:g/example/p 

,或者爲p(RINT)是默認動作:克(葉形)命令,這可以縮短爲

:g/example 

而不是p(rint),其他操作是可能的,例如刪除)。參見:幫助:全球

42

你也可以做一個:

g/pattern/#

,將打印您需要的模式和行號。

38

,如果你想看看這個名單和比賽之間快速切換,可以考慮使用

:vimgrep example %

:grep example %

這將填充「錯誤清單」與所有以便您可以使用:copen將它們全部列出在quickfix緩衝區中,在特定行上按Enter鍵跳轉到該匹配項,或使用類似:cn:cp來回。

了詳盡的解釋,見my reply to a similar question

12

另一種可能性是使用包含文件搜索命令。

[I 

這將列出該詞在光標下的所有出現位置。它可能比你需要的多,因爲它也會搜索當前文件中包含的任何文件。

但是這個命令的好處在於除了每個匹配的行號之外,搜索結果顯示還顯示了匹配數量的計數。

:help include-search 

看到很多變種。

的注意事項有關

:g//p 

這可以進一步因爲,正如其他人所說,P(RINT)是默認的動作減少到

:g// 

23

剛學了一個新的:Location List
類型:lvim foo %在當前文件中搜索foo,並將包含foo的所有匹配輸入位置列表
輸入:lopen在quickfix窗口中打開位置列表,該窗口可以像往常一樣完全導航。
使用:lnext/:lprevious通過名單,並在(使用tpope /未受損傷映射最佳體驗)

4
g/pattern 

如果你有:set number,上面的命令將顯示行數爲好。

如果您還沒有:set number,然後

g/pattern/# 

將顯示行號。

2

,你可以得到一個不錯的quickfix窗口火柴形成當前的搜索模式

:vim // % 
:copen 

超級方便,如果你以前製作只用/pattern

編輯複雜的搜索模式:剛剛發現這也適用於所有打開的緩衝區

:bufdo vimgrepadd // % 
:copen 
0

CTRL-F列出所有搜索結果:

nmap <C-f> :vimgrep /<C-r>//g %<CR> \| !:copen <Enter> 
相關問題