程序员的命令行搜索工具
在过去的几年中,我通过一些面向程序员的工具改进了我的命令行搜索。通过这些工具可以快速的帮助开发人员在不熟悉的代码库中快速找到关键字句,而且没有使用起来简单方便,没有 grep 那么复杂。
搜索一个唯一的 字符串 或 关键字 是一个很好的找到功能所在位置的方式,从而不必跳到文本编辑器。我以前有使用另一个命令,你通过可以通过运行 history
并使用一个工具,像 grep 一样筛选符合给定模式的行。
以下是五个命令行搜索工具的列表,如果您有兴趣更多地使用命令行来快速查找代码,文本和文件,而不依赖于编辑器或IDE,则可以帮助您成为开发人员。
有些工具只能运行在 Linux
中,但是我列出了一些跨平台,快得可笑的工具。(PS: 这句是原话!)
Grep
使用 grep 的好处在于,它几乎可以用在你可能使用的任何 Linux
发行版上。它的实用性在很多不同的环境下都很有用,我会告诉你一些我最喜欢的东西:
如果你只想在PHP文件中找到一个短语并输出行号:
$ grep -RHn --include \*.php Controller .
假设您前几天在控制台中输入了一个命令,但您只记得部分命令。您可以通过 |
和 history
命令来使用 grep
进行搜索:
$ history | grep "php artisan"
您可以使用命令行管理本文中列出的所有 CLI
工具,但我发现了一个更简单的 grep
过滤历史记录。它有一个好的 “副作用” 是过滤后的结果会在开始时给你一个数字,你可以用它来重新运行命令:
$ history | grep 'php artisan'
284 php artisan route:list
$ !284
$ php artisan route:list
Ack
Ack
是 类似于 grep 的工具,但单专门为程序员优化。它默认(即你的项目)递归搜索,而忽略 VCS
目录,.git
并有便利的工具,帮助你用少量的击键来搜索代码。
以同样的 grep
为例,以下是我们如何在PHP文件中搜索 Controller
:
# Ack
$ ack Controller --php
# Here's the grep example
$ grep -RHn --include \*.php Controller .
假设您想搜索除 PHP
以外的所有其他类型的文件。每种类型都有一个 no
标志:
$ ack Controller --nophp
您可以通过 ~/.ackrc
文件扩展确认来添加自定义类型。比方说,你通常只用这样的 blade
文件搜索:
$ ack @auth --blade
Unknown option: blade
ack: Invalid option on command line
要注册 blade
类型,您可以将以下内容添加到 ~/.ackrc
文件中,然后上面的搜索仅查找以下列文件结尾的文件 blade.php
:
--type-set=blade:match:.blade.php$
以下是您可能希望添加一些 Laravel
开发人员的其他一些选项到 ~/.ackrc
文件中 :
# 总是使用字体颜色
--color
# 忽略 PhpStorm 和 NPM 的文件
--ignore-dir=.idea/
--ignore-dir=node_modules/
# 添加到现有的类型
--type-add=ruby:ext:haml,rake,rsel
# 添加新的类型
--type-set=smarty:ext:tpl
--type-set=cakeview:ext:ctp,thtml
--type-set=markdown:ext:md,markdown
--type-set=json:ext:json
--type-set=blade:match:.blade.php$
Ack
在不同的位置查找一个 .ackrc
文件,但是如果你想在没有任何 .ackrc
文件的情况下运行 ack
,请使用 --noenv
。
您可以通过运行验证您的自定义类型 ack --help-types
。Ack
有大量的文档,可能还有一些我还没有发现的东西。查看 ack manual 以发现更多用法。
Silver Searcher
Silver Searcher
是另一个类似于 grep 的工具,更换类似于 ACK
,但它拥有更快的性能。它忽略了项目文件中找到的 .gitignore
文件中的内容。
你可以在 OS X
上使用 Homebrew
安装 Silver Searcher
:
brew install the_silver_searcher
您使用 ag
命令运行 Silver Searcher
:
$ ag Controller --php
我不会对 Silver Searcher
做详细的介绍,但是如果我想搜索大量的文件,我有时候会选择 ag
。
Sift
Sift
是一个用 Golang
构建的 grep
替代方案,这意味着它可以在 Linux
,Windows
,OS X
等平台上广泛使用。它的速度非常快,而且它有一些很酷的方法来取代 grep
+ awk
组合提取数据。
我建议你查看 示例,了解 Sift
强大的功能。
我们基本的 PHP
搜索已经使用了其他工具完成,这里是你如何找到 PHP
文件中的 Controller
:
# Only PHP
sift --ext php Controller
# Exclude PHP
sift --exclude-ext php Controller
RipGrep
RipGrep
与 Silver Searcher
类似,但与 GNU grep的速度
类似,它可以在 Mac
,Linux
和 Windows
上运行。他们自己是这样吹的:"RipGrep 通常比其他任何工具都快",各种吹 Rust
的正则表达式引擎,并且会读取 .gitignore
文件。( 像 The Silver Searcher
一样)。
以下是如何使用 RipGrep
搜索包含 Controller
的 PHP
文件:
rg --type=php Controller
下一步是什么
最终,我选择了 Ack
作为我的搜索工具,我认为在使用它作为 grep
替代品时,您会学到很多有价值的东西。我强烈建议学习如何使用 ack
,但这些工具都具有独特的功能,能让你学到不同的东西。
如果你需要搜索大量的文件例如搜索(node_modules
文件夹),那么我建议你使用 The Silver Searcher
,Sift
或 RipGrep
。在大型项目中,ack
的速度确实不是那么令人满意,这会使您注意到其他工具的速度优势。
本作品采用《CC 协议》,转载必须注明作者和本文链接
https://github.com/BurntSushi/ripgrep 真乃神器