Вечерний коммит

Пять флагов 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 запрос ищется буквально, экранировать скобки и точки не нужно.