我想使用ripgrep在我的 Ubuntu 20 机器上。我从各种存储库安装了它(apt、snap、货物),甚至自己构建了它,但总是遇到同样的问题:
根据手册,你应该能够运行
rg 'pattern'
ripgrep 只会在当前工作目录中递归搜索。然而对我来说,它似乎总是期望一个路径说明符,事实表明,即使具有该模式的文件存在于当前目录的顶层,它也不会找到匹配项。
仅当我执行以下操作时,Ripgrep 才会起作用:
rg 'pattern' *
这不会有太大的问题,但我打算在 vim-addon 中使用 ripgrep,该插件需要手册中的行为。所以问题是:为什么 ripgrep 的行为如此奇怪,我该如何修复这种行为?
编辑:
运行带有标志的命令--debug
将产生以下输出:
DEBUG|grep_regex::literal|grep-regex/src/literal.rs:59: literal prefixes detected: Literals { lits: [Complete(test)], limit_size: 250, limit_class: 10 }
DEBUG|globset|globset/src/lib.rs:435: built glob set; 0 literals, 0 basenames, 11 extensions, 0 prefixes, 0 suffixes, 0 required extensions, 0 regexes
DEBUG|globset|globset/src/lib.rs:435: built glob set; 0 literals, 0 basenames, 11 extensions, 0 prefixes, 0 suffixes, 0 required extensions, 0 regexes
DEBUG|globset|globset/src/lib.rs:435: built glob set; 0 literals, 0 basenames, 11 extensions, 0 prefixes, 0 suffixes, 0 required extensions, 0 regexes
DEBUG|globset|globset/src/lib.rs:435: built glob set; 0 literals, 0 basenames, 11 extensions, 0 prefixes, 0 suffixes, 0 required extensions, 0 regexes
DEBUG|globset|globset/src/lib.rs:430: glob converted to regex: Glob { glob: "**/*", re: "(?-u)^(?:/?|.*/)[^/]*$", opts: GlobOptions { case_insensitive: false, literal_separator: true, backslash_escape: true }, tokens: Tokens([RecursivePrefix, ZeroOrMore]) }
DEBUG|globset|globset/src/lib.rs:435: built glob set; 0 literals, 0 basenames, 0 extensions, 0 prefixes, 0 suffixes, 0 required extensions, 1 regexes
DEBUG|globset|globset/src/lib.rs:435: built glob set; 0 literals, 0 basenames, 11 extensions, 0 prefixes, 0 suffixes, 0 required extensions, 0 regexes
DEBUG|ignore::walk|ignore/src/walk.rs:1639: ignoring ./.cache: Ignore(IgnoreMatch(Gitignore(Glob { from: Some("./.gitignore"), original: "*", actual: "**/*", is_whitelist: false, is_only_dir: false })))
...
然后它与我的主目录的每个子文件夹的最后一行相同。
答案1
好的,感谢@Brian,我已经解决了这个问题。
ripgrep
具有内置的忽略逻辑,自动忽略它在中找到的文件.gitignore
。
为了通过 git 保存我的点文件,我在我的主目录中设置了一个存储库,默认情况下,它会忽略除我使用 添加的文件之外的所有文件git add -f ...
。即在.gitignore
主目录中的文件中,我忽略所有 ( *
) 文件,这反过来又导致 ripgrep 也忽略它们。我不认为太多人会遇到同样的问题,但也许有一天这会对某些人有所帮助。