Пять флагов ripgrep на каждый день
Поиск по коду я давно делаю через rg, а не через редактор. Из десятков флагов постоянно нужны пять. Записываю, чтобы не лезть в справку.
Сначала о том, что rg делает сам. Он не заглядывает в файлы из .gitignore, в скрытые и в бинарные. Если нужного файла нет в выдаче — скорее всего, дело в этом. Флаг -uuu отключает все три фильтра разом.
-S: умный регистр
rg -S userid
Запрос строчными буквами ищется без учёта регистра. Появилась хоть одна заглавная — с учётом. Я прописал этот флаг в настройках и забыл про него.
-t: только нужный язык
rg -t py "def handle"
Ищет только в файлах одного типа. Полный список типов покажет rg --type-list.
-l: имена файлов без строк
rg -l TODO
Удобно, когда важно «где», а не «что»: список файлов можно сразу передать другой команде.
-C: контекст вокруг
rg -C 3 "connection refused"
Три строки выше и три ниже совпадения. Для логов незаменимо.
-g: исключить лишнее
rg -g '!vendor/**' parseConfig
Восклицательный знак в начале шаблона значит «кроме». Без него тот же флаг, наоборот, ограничит поиск шаблоном.
И один запасной: -F
По умолчанию запрос — регулярное выражение, и строка вроде foo(bar) найдёт не то. С -F запрос ищется буквально, экранировать скобки и точки не нужно.