Какой самый простой способ поиска регулярного выражения по всему содержимому всех файлов в текущем проекте, пропуская ненужные файлы?
Бесполезные файлы - это такие вещи, как скомпилированные файлы, импортированные библиотеки, файлы контроля версий и т. Д.
Я в курсе rgrep
, но он просто ищет все. Есть ли пакет, который выполняет «интеллектуальный» поиск и знает несколько разных языков программирования, поэтому мне не пришлось бы настраивать его для каждого отдельного проекта?
rgrep
немного сбивает с толку, учитывая, что он исключает все файлы, соответствующие критериям «бесполезных файлов» по умолчанию.Ответы:
Поиск по проекту в Emacs может быть выполнен с использованием снаряда .
Это позволяет для конфигурации проекта игнорировать файлы (в
<projectroot>\.projectile
файле) или определять подкаталоги для мониторинга и игнорирования всех остальных.Он может работать
grep
,ack
(требуетсяack-and-a-half.el
) иag
(ag.el
) на файлы в определенном проекте (либо на основе.projectile
файла или находя поддерживаемый VC - файл , чтобы определить корень проекта).Полезные команды
(Что касается поиска полезных файлов)
В соответствии с меткой снаряда
C-c p s g
:: Запуститьgrep
файлы в проекте.C-c p s a
:: Работаетack
на проекте. Требуется наличие с половиной.C-c p s s
:: Работаетag
над проектом. Требуется наличие аг.э.C-c p f
:: Показать список всех файлов в проекте.C-c p d
:: Показать список всех каталогов в проекте.C-c p a
:: Переключение между файлами с одинаковыми именами, но с разным расширением в проекте.C-c p o
:: Работаетmulti-occur
на всех открытых буферах проекта.Они будут действовать только на файлы, определенные как часть проекта (или найденные при создании / восстановлении кэша).
источник
Поиск всего релевантных файлов в рамках проекта можно выполнить с помощью
ag
a_silver_searcher .Почему аг?
.gitignore
,.hgignore
,svn:ignore
. Вы можете выбрать для своих поисков НЕ использовать список игнорирования из списков игнорирования контроля версий с помощью-U
переключателя..agignore
файл..agignore
файл может быть помещен в ваш,$HOME
а затем вы можете поместить больше.agignore
файлов, специфичных для проекта, в корни вашего проекта.Настройка
ag
и emacsag
aka the_silver_searcher в вашей системе..agignore
файл. Я предпочитаю иметь только глобальный.agignore
файл в моем$HOME
.ag
пакет (доступно на Melpa).wgrep-ag
пакет (также доступен на Melpa). Это поможет, если и когда вы попытаетесь выполнить поиск / замену всего проектаag
.ag-project
илиag-project-regexp
(которая входит вag
пакет) для поиска файлов по всему проекту.ag-project-root-function
.ag-project
/ag-project-regexp
, поместив пустую.git
папку в корень вашего проекта. Вы тогда не должны настраиватьag-project-root-function
.источник
Если ваш проект использует Git, вам нужен только
counsel
https://github.com/abo-abo/swipercounsel-git
найти файлcounsel-git-grep
grepЕдинственная зависимость это мерзавец
Текстовое копирование выполняется быстрее, чем поиск серебра (ag)
Адвокат также предоставляет другие мощные инструменты. Например, после запуска
counsel-git-grep
, вы можете нажать кнопкуC-c C-o
иC-x C-q
перейти вwgrep-mode
легко заменить текст в рамках проекта.Есть статья https://sam217pa.github.io/2016/09/11/nuclear-power-editing-via-ivy-and-ag/, объясняющая подробности. Эта статья использует
counsel-ag
(другая команда, встроенная в адвокат), ноcousnel-git-grep
использует точно такой же рабочий процесс.источник
ag
это также программа grep, какgit-grep
. Я не могу сказать, что быстрее. См. Github.com/BurntSushi/ripgrep, в котором сравнивается производительность популярных программ grep (включаяag
иgit-grep
)Первый ответ прекрасен, но он оставляет некоторые важные детали о современных версиях Emacs. Я знаком с Emacs сам, поэтому другие новички могут не знать об этом. Если ваша цель - поиск текста внутри файла в ПРОЕКТЕ, то сначала вы должны установить Projectile, используя репозиторий MELPA.
Это установит пакет в .emacs.d и добавит некоторую базовую конфигурацию в .emacs в вашем каталоге $ USER (при условии, что вы создали файл .emacs), например, требуется Projectile в вашей установке Emacs.
Тем не менее, вам все еще нужно включить его и связать префиксы раскладки, чтобы вы могли вызывать его в мини-буфере.
В принятом ответе упоминается следующая команда:
Это не будет работать, если вы не настроите Projectile с этим префиксом раскладки. Но я настроил его для использования Cc Cp в качестве команды для Project в .emacs:
Теперь, учитывая это, я могу выполнять поиск текста в файлах в проекте, используя grep:
Чтобы разбить его,
C-c C-p
вызовет Projectile иs g
выполнит поиск grep. Вы получите красивый результат, подобный этому, при условии, что ваш поискvisit_contact
и вы ищете rspec Руби в проекте:источник