当我点击时,我想列出匹配项:
/example
这样我就可以看到所有比赛的位置。
答案 0 :(得分:206)
答案 1 :(得分:48)
你也可以这样做:
g/pattern/#
将打印您想要的图案和行号。
答案 2 :(得分:42)
如果您想查看此列表并在匹配项之间快速跳转,请考虑使用
:vimgrep example %
或
:grep example %
这将填充所有匹配的“错误列表”,以便您可以使用:copen
将它们全部列在quickfix缓冲区中,按特定行上的Enter跳转到该匹配,或使用命令像:cn
和:cp
一样来回走动。
有关详细说明,请参阅my reply to a similar question
答案 3 :(得分:31)
刚刚学会了一个新的:Location List
!
输入:lvim foo %
以在当前文件中搜索foo
,并将包含foo
的所有匹配项输入位置列表。
键入:lopen
以在quickfix窗口中打开位置列表,该窗口可以像往常一样完全导航
使用:lnext
/ :lprevious
通过列表(使用 tpope / unmpaired 映射获得最佳体验)
答案 4 :(得分:15)
另一种可能性是使用包含文件搜索命令。
[I
这将列出光标下所有出现的单词。它可能比您需要的多,因为它还将搜索当前文件中包含的任何文件。
但是这个命令的好处是搜索结果显示还显示了匹配数的计数,以及每个匹配的行号。
:help include-search
看到很多变种。
关于
的说明:g//p
这可以进一步减少到
:g//
因为正如其他人所说,p(rint)是默认行为。
答案 5 :(得分:10)
使用:set hlsearch
将突出显示黄色的所有匹配项,以便您轻松扫描文件以进行匹配。这可能不是你想要的,但在搜索之后:g // p会给你列出的匹配
答案 6 :(得分:8)
详细说明......而不是
/example
:g//p
你也可以直接写
:g/example/p
或者,因为p(rint)是:g(lobal)命令的默认操作,这可以缩短为
:g/example
而不是p(rint),其他动作也是可能的,例如:删除)。请参阅:help:global
答案 7 :(得分:8)
你可以得到一个漂亮的quickfix
窗口,其匹配项构成您当前的搜索模式
:vim // %
:copen
如果您之前使用/pattern
制作了复杂的搜索模式,那么非常方便
编辑:刚刚发现这也适用于所有开放缓冲区
:bufdo vimgrepadd // %
:copen
答案 8 :(得分:5)
g/pattern
如果您有:set number
,则上述命令也会显示行号。
如果您没有:set number
,那么
g/pattern/#
将显示行号。
答案 9 :(得分: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 :(得分:0)
我为此编写了一段代码。它实际上避免了vimgrep
中的问题。它甚至适用于未命名的文件。而且更容易使用。
function! Matches(pat)
let buffer=bufnr("") "current buffer number
let b:lines=[]
execute ":%g/" . a:pat . "/let b:lines+=[{'bufnr':" . 'buffer' . ", 'lnum':" . "line('.')" . ", 'text': escape(getline('.'),'\"')}]"
call setloclist(0, [], ' ', {'items': b:lines})
lopen
endfunction
使用模式调用它时,它将打开包含所有匹配项的位置窗口。
这可能是命令
command! -nargs=1 Mat call Matches(<f-args>)
所以您要做的就是键入:Mat pattern
我还使用以下映射来获取当前视觉选择的匹配项。
vnoremap Y "xy:call Matches(@x)<CR>
答案 11 :(得分:-1)
Ctrl-f列出所有搜索结果:
nmap <C-f> :vimgrep /<C-r>//g %<CR> \| !:copen <Enter>