You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ag的-G选项指定文件夹搜索?正则匹配问题求助

解决ag路径匹配与Vim便捷搜索问题

我来帮你搞定这两个问题,先从ag的正则匹配说起,再讲Vim里怎么实现Atom那种顺手的路径搜索~

一、修复ag的-G正则不生效问题

你用ag -G routes会命中所有路径含"routes"的文件,这是因为-G的正则是匹配路径的任意部分,比如app/routes/file.php或vendor/routes/utils.php都会被匹配到。

而你尝试-G ^routes没生效,核心原因是ag的路径匹配是基于当前工作目录的完整相对路径:

  • 如果文件在根目录的routes/下,路径是routes/index.php,^routes能匹配;
  • 但如果文件在子目录比如app/routes/下,路径是app/routes/api.php,^routes就不会匹配(因为路径开头是app)。

根据你的需求,给你两个实用的正则写法:

  • 若要匹配所有层级下名为routes的文件夹:
    ag "你的搜索关键词" -G '/routes/'
    
    这个正则会匹配路径中包含/routes/的文件,不管它在哪个层级。
  • 若要匹配根目录下的routes文件夹:
    ag "你的搜索关键词" -G '^routes/'
    

二、在Vim里实现Atom式多文件夹+排除搜索

Atom的app,routes,!storage语法确实省心,在Vim里用ag也能轻松复刻,分两种场景:

1. 无需插件:直接执行shell命令

在Vim里直接敲下面的命令,就能在app/和routes/搜索,同时排除storage/目录:

:!ag "你的搜索关键词" app/ routes/ --ignore-dir storage

2. 用vim-ag插件(更高效的Vim内搜索)

如果你装了vim-ag插件(很多Vim用户必备),可以用:Ag命令直接在Vim内调用ag,结果会显示在quickfix窗口,回车就能跳转:

:Ag "你的搜索关键词" app routes --ignore-dir storage

要是你想更贴近Atom的语法,还可以在~/.vimrc里自定义一个命令:

command! -nargs=+ AgDirs call system('ag ' . shellescape(<q-args>) . ' | cgetexpr')

之后就能用类似的写法(把逗号换成空格,!换成--ignore-dir):

:AgDirs "你的搜索关键词" app routes --ignore-dir storage

小提示:其实ag本身支持直接指定多个搜索目录,配合--ignore-dir排除目录,比硬套正则更直观,没必要纠结用-G实现哦~

内容的提问来源于stack exchange,提问作者Jesse Leite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:18:25