如何递归搜索整个项目/文件夹中的单词?

shi*_*bly 54 vim search find

假设我正在搜索JFactory文件夹内的一个类,它是子目录.

如何归档包含class JFactory哪个文件?

我不想替换那个词,但我需要找到包含的文件class JFactory.

Ben*_*oit 76

:vimgrep /JFactory/ **/*.java
Run Code Online (Sandbox Code Playgroud)

您可以替换模式/JFactory//\<JFactory\>/如果你想全字匹配.:vim是简写:vimgrep.

如果JFactory或者\<JFactory\>是您当前的搜索模式(例如你打*一个发生),你可以使用空搜索模式::vimgrep // **/*.java,它会使用最近的搜索模式来代替.便利!

警告::vimgrep 如果启用,将触发autocmds.这可能会减慢搜索速度.如果你不希望你能做到:

:noautocmd vimgrep /\<JFactory\>/ **/*.java
Run Code Online (Sandbox Code Playgroud)

这会更快.但是:它不会触发语法高亮或打开未gz压缩的文件等.

请注意,如果您希望外部程序grep您的模式,您可以执行以下操作:

:set grepprg=ack
:grep --java JFactory
Run Code Online (Sandbox Code Playgroud)

Ack是一个Perl编写的grep替代品.请注意,您必须切换到Perl正则表达式.

一旦您选择的命令返回,您可以使用Vim文档中描述的那些命令浏览搜索结果:help quickfix.查找:cfirst,:cnext,:cprevious,:cnfile,等.

2014更新:现在有新的方式来做到这一点与the_silver_searcher或者the_platinum_searcher,要么ag.vimunite.vim插件.

  • 供参考:`:vim`是`:vimgrep`命令的简称. (8认同)
  • 之后:vimgrep,使用`:cw`列出所有结果 (4认同)
  • 如何跳到下一场比赛,`n`或'N`是没用的 (2认同)

Kar*_*mid 16

从项目根文件夹中,运行以下命令:

grep -H -r 'what_you_search' * | less
Run Code Online (Sandbox Code Playgroud)

您将获得一个文件夹列表和与该字符串匹配的行.

  • 你能解释一下每个操作员的作用吗? (2认同)
  • 解释标志和命令,来自“man grep”:“-H”:始终打印带有输出行的文件名标题。和“-r”:递归搜索列出的子目录。`| less` 部分会将输出“管道”到 `less` 程序中,允许您使用箭头滚动内容,并通过按 `q` 退出。 (2认同)

Ant*_*han 8

Silver Searcher(https://github.com/ggreer/the_silver_searcher)强烈推荐,非常快!

安装

sudo pacman -S the_silver_searcher  // arch linux 
sudo apt install silversearcher-ag  // ubuntu
Run Code Online (Sandbox Code Playgroud)

用法

$ ag keywords
Run Code Online (Sandbox Code Playgroud)

与vim集成

rking/ag.vim(https://github.com/rking/ag.vim)

安装后

:Ag keywords
Run Code Online (Sandbox Code Playgroud)