amix vimrc 学习: 使用 vimgrep 进行多文件下关键字搜索

amix vimrc 学习: 使用 vimgrep 进行多文件下关键字搜索


vimgrep 命令可用于在工程目录下的全部文件中搜索某个关键字的所有出现,它类似于在 eclipse 下使用 ctrl-h 快捷键进行 file search 操作。

在 vim 下使用 :help vimgrep 命令可以查看到 vimgrep 的使用帮助。当然你也可以通过这篇文章 (Find in files within Vim )学习这个命令。

vimgrep 命令是 vim 内置的两个 grep 工具之一,另一个是 lvimgrep。看下面的对比:

  • vimgrep vs. lvimgrep:vimgrep 将搜索返回的结果放到 quickfix list 下面,而 lvimgrep 则将结果放到了 location list。
  • quickfix vs. location list:quickfix list 是全局的,相对于窗口而言,不同的窗口共用一个quickfix list,可以使用 :cw 或者 :copen 打开;而 loaction list 是局部于某个特定窗口的,即不同窗口的 location list 可以不同,使用 :lw 或者 :lopen 命令打开。(请使用:help quickfix:help location-list命令获取帮助)

vimgrep 命令的语法构成如下:

:vim[grep][!] /{pattern}/[g][j] {file} ...

含义如下:

  • vim 可作为 vimgrep 的缩写
  • ! 可紧随 vimgrep 之后,表示强制执行该命令
  • 索的关键字 pattern 放在了两个 “/” 中间,并且支持正则表达式
  • gj 可选。 如果添加 g,将显示重复行, 如果添加 j,vim 将不会自动跳转到第一个匹配的行(可能是别的文件)

一个简单的例子:

:vimgrep /hello/j **

这个命令将在当前目录(可通过 :pwd 命令查看)及其所有子目录下搜索关键字 hello 的所有出现


最后,了解了 vimgrep 的基本用法之后,再来看一下 amix vimrc 中的 .vimruntime/vimrc/basic.vim 中关于 vimgrep 命令映射的片段:


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => vimgrep searching and cope displaying
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" When you press gv you vimgrep after the selected text
vnoremap <silent> gv :call VisualSelection('gv', '')<CR>

" Open vimgrep and put the cursor in the right position
map <leader>g :vimgrep // **/*.<left><left><left><left><left><left><left>

" Vimgreps in the current file
map <leader><space> :vimgrep // <C-R>%<C-A><right><right><right><right><right><right><right><right><right>

" When you press <leader>r you can search and replace the selected text
vnoremap <silent> <leader>r :call VisualSelection('replace', '')<CR>

" Do :help cope if you are unsure what cope is. It's super useful!
"
" When you search with vimgrep, display your results in cope by doing:
"   <leader>cc
"
" To go to the next search result do:
"   <leader>n
"
" To go to the previous search results do:
"   <leader>p
"
map <leader>cc :botright cope<cr>
map <leader>co ggVGy:tabnew<cr>:set syntax=qf<cr>pgg
map <leader>n :cn<cr>
map <leader>p :cp<cr>

其中映射后几个比较有用的命令有:

  • visual 模式下,选择某个关键字后,按下 gv,搜索选中的关键字
  • ,<space> ,光标落在 // 中间,在当前文件中搜索任意你指定的词
  • 将 cope 映射为可以在搜索结果中查看前后匹配项的命令 ,n ,p

amix vimrc 将 <leader>映射为,

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s