Поиск по содержимому файлов не выходя из VIM

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

Скриншот с результатом поиска

vim_ack.png

ack может хранить свои настройки в текстовом файле, в нем можно тюнить опции ack и добавить свои фильтры поиска, например, поиск только по файлам с постами

ack --post vim

Мой .ackrc

grep

Для поиска по содержимому файлов начиная с текущей папки и ниже, с использованием grep (встроенная возможность в vim)

:vimgrep pattern **/*.py | :cw 

:cw - открывает буфер с списком найденных файлов.

По-умолчанию, первый найденный файл становится активным, для отмены этого действия надо добавить параметр j

:vimgrep /pattern/j **/*.py | :cw 

Как и для ack, список файлов появится в отдельном окне (Quickfix), без возможности открыть файл в новом табе.

blog comments powered by Disqus