
我想用ripgrep在我的 Ubuntu 20 機器上。我已經從各種存儲庫安裝了它(apt, snap, 貨物)甚至自己建造了它,但總是遇到同樣的問題:
根據手冊,應該能夠運行
rg 'pattern'
ripgrep 只會在目前工作目錄中遞歸搜尋。然而對我來說,它似乎總是期望有一個路徑說明符,事實表明,即使具有該模式的檔案存在於當前目錄的頂層,它也不會找到匹配項。
只有當我執行以下操作時,Ripgrep 才會起作用:
rg 'pattern' *
這不會是太大的問題,但我打算在 vim 插件中使用 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 也忽略它們。我不認為太多人會遇到同樣的問題,但也許有一天這對某人有幫助。