
Eu quero usarripgrepna minha máquina Ubuntu 20. Eu instalei de vários repositórios (apto, snap, carga) e até construí eu mesmo, mas sempre tive o mesmo problema:
De acordo com o manual, deve-se poder apenas executar
rg 'pattern'
e ripgrep irá apenas pesquisar recursivamente no diretório de trabalho atual. No entanto, para mim, sempre parece esperar também um especificador de caminho, demonstrado pelo fato de que ele não encontrará uma correspondência, mesmo que um arquivo com o padrão esteja presente no nível superior do diretório atual.
Ripgrep só funcionará se eu fizer algo como:
rg 'pattern' *
Isso não seria um grande problema, mas pretendo usar o ripgrep em um complemento vim que espera o comportamento do manual. Portanto, a questão é: por que o ripgrep se comporta de maneira tão estranha e como faço para corrigir o comportamento?
Editar:
Executar o comando com o --debug
sinalizador fornece a seguinte saída:
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 })))
...
e então é igual à última linha de cada subpasta do meu diretório pessoal.
Responder1
Ok, graças a @Brian resolvi o problema.
ripgrep
possui uma lógica de ignorar integrada, ignorando automaticamente os arquivos encontrados em .gitignore
.
Para salvar meus dotfiles via git, configurei um repositório em meu diretório inicial, que por padrão ignora todos os arquivos, exceto aqueles que eu adiciono usando git add -f ...
. Ou seja, no meu .gitignore
arquivo no diretório inicial, eu ignoro todos *
os arquivos (), o que, por sua vez, fez com que o ripgrep os ignorasse também. Não creio que muitos tenham o mesmo problema, mas talvez isso ajude alguém algum dia.