ack
"Whoa, this is *so* much better than grep it's not even funny." Jacob Kaplan-Moss, creator of Django.
ack удобная утилита для поиска по содержимому текстовых файлов (бинарные файлы по-умолчанию игнорируются) начиная с текущего каталоге и вглубь. Написана на perl, разработчики заявляют, что их детище работает быстрее чем grep. Из вкусностей, кроме скорости, еще стоит отметить более удобный набор параметров и включенная подсветка из коробки. Не впечатлило? тогда читаем о других прелестях ack на странице better than grep, a source code search tool for programmers, раздел Top 10 reasons to use ack instead of grep.
Установка под Ubuntu
sudo apt-get install ack-grep
После установки надо создать симлинк ack - пригодится при интеграции с vim.
sudo ln -s /usr/bin/ack-grep /usr/bin/ack
Подключим ack.vim к vim'у, например как описано в этом посте.
Пример поиска по всем файлам из текущего каталога и ниже
:Ack pattern
После этой команды появится окно с найденными результатами. Единственное неудобство - при выборе найденного файла содержимое открываются в текущем буфере, было бы куда удобней открыть результат поиска в новом табе. На github'e, в репозитарии проекта создали тикет с такой просьбой - присоединяемся, плюсуем ;).
Осталось назначить вызов на какую-то удобную клавишу, например так
nnoremap ,a :Ack
Скриншот с результатом поиска
ack может хранить свои настройки в текстовом файле, в нем можно тюнить опции ack и добавить свои фильтры поиска, например, поиск только по файлам с постами
ack --post vim
Мой .ackrc
grep
Для поиска по содержимому файлов начиная с текущей папки и ниже, с использованием grep (встроенная возможность в vim)
:vimgrep pattern **/*.py | :cw
:cw - открывает буфер с списком найденных файлов.
По-умолчанию, первый найденный файл становится активным, для отмены этого действия надо добавить параметр j
:vimgrep /pattern/j **/*.py | :cw
Как и для ack, список файлов появится в отдельном окне (Quickfix), без возможности открыть файл в новом табе.