Ubuntu 20 の Ripgrep パス指定子

Ubuntu 20 の Ripgrep パス指定子

使いたいリプレイ私のUbuntu 20マシンでは、さまざまなリポジトリからインストールしました(適切、スナップ、貨物) 自分でも構築しましたが、常に同じ問題に遭遇しました。

マニュアルによれば、ただ実行するだけでいいはずだ

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 もそれらのファイルを無視するようになります。同じ問題に遭遇する人はそれほど多くないと思いますが、いつか誰かの役に立つかもしれません。

関連情報