如何在整个项目/文件夹中recursionsearch一个单词?
假设我正在search文件夹内的JFactory
类,它是子目录。
我怎样才能存档包含class JFactory
?
我不想replace这个词,但我需要find包含class JFactory
。
:vimgrep /JFactory/ **/*.java
你可以用/\<JFactory\>/
replace模式/JFactory/
/\<JFactory\>/
如果你想要全字匹配。 :vim
简写为:vimgrep
。
如果JFactory
或\<JFactory\>
是您当前的search模式(例如您在一次出现*
时),则可以使用空search模式:vimgrep // **/*.java
,它将使用最后的search模式。 便利!
警告:如果启用, :vimgrep
会触发:vimgrep
。 这可能会减慢search速度。 如果你不想要,你可以这样做:
:noautocmd vimgrep /\<JFactory\>/ **/*.java
这会更快。 但是:它不会触发语法突出显示或打开gz
文件未压缩等。
请注意,如果你想要一个外部程序来grep你的模式,你可以做如下的事情:
:set grepprg=ack :grep --java JFactory
Ack
是Perl写的grep替代品。 请注意,那么你将不得不切换到Perl的正则expression式。
一旦您select的命令返回,您可以使用Vim文档中描述的命令浏览search结果:help quickfix
。 查找:cfirst
, :cnext
, :cprevious
, :cnfile
等
2014年更新:现在有新的方法可以通过the_silver_searcher
或the_platinum_searcher
以及ag.vim
或unite.vim
插件来实现。
从项目根文件夹中运行以下命令:
grep -H -r 'what_you_search' * | less
你将得到一个文件夹列表和与该string匹配的行。
看一下ctags和cscope ,它们可以让你跳到类和函数定义,并find这些函数/类在哪里使用。
这个脚本可能有助于: Filesearch 。
Silver Searcher( https://github.com/ggreer/the_silver_searcher )强烈推荐,非常快!
安装
sudo pacman -S the_silver_searcher // arch linux sudo apt install silversearcher-ag // ubuntu
用法
$ ag keywords
与vim集成
rking / ag.vim( https://github.com/rking/ag.vim )
安装后
:Ag keywords
通过以下方式打开命令行窗口:
Esc – 确保您处于正常模式
键入q,键入:
命令行应该打开(它就像一个tmp文件来写你可以导航的命令,你可以在任何vim文件中正常导航…
键入i进入插入模式
这个例子将search当前目录下的to_srchstring,用于' .js'和' .java'types的所有文件types,但忽略包含stringnode_modules的所有文件path
:g/console.log/ | :vimgrep /console.log/ `find . -type f -name '*.js' -o -name '*.java' -not -path '*node_modules/*'`
现在,您可以:通过查找结果使用箭头键导航
你也可以在.vimrc中设置
" how-to search recursively under the current dir for the files of type js and java but omit the " node_modules file paths ":g/console.log/ | :vimgrep /console.log/ `find . -type f -name '*.js' -o -name '*.java' -not -path '*node_modules/*'` " reminder open the quick fix window by :copen 20 " reminder close the quick fix window by :ccl
你可以省略第一个:q / to_srch /我使用它来自动突出显示search结果,因为我在〜/ .vimrc中设置了hlsearch
任何提示如何自动启用从vimgrep或在vimrc的srch结果将高度赞赏…