Как вы просматриваете код, который находится во многих разных каталогах?

StackOverflow https://stackoverflow.com/questions/865382

  •  21-08-2019
  •  | 
  •  

Вопрос

Я работаю над программой Python, которая активно использует яйца (Plone).Это означает, что существует 198 каталогов, полных кода Python, в которых я, возможно, захочу поискать во время отладки.Есть ли хороший способ поиска только файлов .py только в этих каталогах, избегая несвязанного кода и больших двоичных файлов?

Это было полезно?

Решение

find DIRECTORY -name "*.py" | xargs grep PATTERN

Кстати, с тех пор, как я это написал, я обнаружил подтверждение, что является гораздо лучшим решением.

(И после этого редактирования я обнаружил ag).

Другие советы

Я бы настоятельно рекомендовал подтверждение, заменитель grep, «ориентированный на программистов с большими деревьями разнородного исходного кода» (с сайта)

grep -r -n "PATTERN" --include="*.py" DIRECTORY

Я также часто использую ack в эти дни.Я немного подправил его, чтобы найти все соответствующие типы файлов:

# Add zcml to the xml type:
--type-add
xml=.zcml

# Add more files the plone type:
--type-add
plone=.dtml,.zpt,.kss,.vpy,.props

# buildout config files
--type-set
buildout=.cfg

# Include our page templates to the html type so we can limit our search:
--type-add
html=.pt,.zpt

# Create txt file type:
--type-set
txt=.txt,.rst

# Define i18n file types:
--type-set
i18n=.pot,.po

# More options
--follow
--ignore-case
--nogroup

Важно помнить, что ack не найдет файлы, если расширение не указано в его конфигурации.См. «ack --help-types» для всех доступных типов.

Я также предполагаю, что вы используете омлет чтобы вы могли grep/ack/найти все связанные файлы?

Эта проблема и стала мотивацией для создания коллектива.рецепт.омлет.Это рецепт сборки, который может символически связать все яйца из вашего рабочего набора в одну структуру каталогов, на которую вы можете указать свою любимую утилиту поиска.

find <directory> -name '*.py' -exec grep <pattern> {} \;

Есть также Идентификаторы GNU если вы хотите очень быстро найти идентификаторы в большом дереве исходных кодов.Для этого необходимо заранее создать базу данных поиска, запустив mkid (и настроив файл конфигурации, чтобы он не игнорировал файлы .py). z3c.recipe.tag позаботится об этом, если вы используете buildout.

На всякий случай, если вам нужно решение OSS без командной строки...

Я использую пичарм.Он имеет встроенную поддержку сборки.Вы указываете его на сгенерированный контейнер/экземпляр сборки, и он устанавливает внешние зависимости проекта для всех яиц, используемых экземпляром.Тогда весь самоанализ и навигация по коду в IDE работают хорошо.Определение Goto, экземпляры goto, поддержка рефакторинга и, конечно же, поиск.

Я рекомендую ухмылка искать, омлет при работе с Plon и функцией pydev «Globals Browser» (с eclipse или aptana studio).

И просто потому, что ответов мало...

Если вы занимаетесь регулярной разработкой, стоит приложить усилия, чтобы установить Eclipse с Pydev (или, что еще проще, Aptana Studio, которая представляет собой модифицированную версию Eclipse), и в этом случае инструменты поиска находятся прямо здесь.

Моя жизнь с grep стала намного приятнее с тех пор, как я открыл для себя команду rgrep в Emacs.

Допустим, я хочу найти IPortletDataProvider в исходном коде Plone.Я делаю:

  1. M-x rgrep
  2. Emacs запрашивает строку поиска (IPortletDataProvider)
  3. ...затем какие файлы искать (*.py)
  4. ...затем какой каталог (~/Plone/buildout-cache/eggs).Если я уже редактирую файл, по умолчанию используется каталог этого файла, что обычно именно то, что мне нужно.

Результаты появятся в новом буфере.Вверху находится find | xargs grep команда Emacs была запущена.Все совпадения выделены.Я могу осуществлять поиск в буфере, используя стандартные команды текстового поиска.Лучше всего то, что я могу нажать Enter (или щелкнуть) по совпадению, чтобы открыть этот файл.

Это довольно приятный способ работы.мне нравится, что мне не нужно запоминать find | xargs grep последовательности аргументов, но вся эта сила будет у меня, если она мне понадобится.

Emacs rgrep example

OpenGrok — отличный выбор для поиска и навигации по источникам.Однако работает на Java.

Мне бы очень хотелось, чтобы было что-то вроде http://opengrok.plone.org/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top