你如何通过生活在许多不同目录中的代码?

时间:2009-05-14 19:58:10

标签: python grep plone zope

我正在研究一种大量使用鸡蛋(Plone)的Python程序。这意味着有198个目录充满了我可能想要在调试时搜索的Python代码。是否有一种很好的方法只在那些目录中搜索.py文件,避免不相关的代码和大型二进制文件?

12 个答案:

答案 0 :(得分:22)

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

顺便说一句,自写这篇文章以来,我发现了ack,这是一个更好的解决方案。

(自那次编辑以来,我发现了ag)。

答案 1 :(得分:18)

我强烈推荐ack,一个grep替代品,“针对拥有大量异构源代码树的程序员”(来自网站)

答案 2 :(得分:16)

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

答案 3 :(得分:6)

这些天我也经常使用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”。

我还假设您正在使用omelette,以便您可以grep / ack /查找所有相关文件?

答案 4 :(得分:4)

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

答案 5 :(得分:4)

这个问题是创建collective.recipe.omelette的动机。这是一个扩展配方,它可以将您工作集中的所有鸡蛋符号链接到一个目录结构中,您可以将您喜欢的搜索实用程序指向。

答案 6 :(得分:2)

如果你想非常快速地在大型源代码树中grep标识符,那么还有GNU idutils。它需要通过运行mkid(并将其配置文件调整为不忽略.py文件)提前构建搜索数据库。如果你使用buildout,z3c.recipe.tag会处理这个问题。

答案 7 :(得分:2)

以防您需要非命令行OSS解决方案...

我使用pycharm。它内置了对buildout的支持。您将其指向buildout生成的bin / instance,并将项目外部依赖项设置为实例使用的所有egg。然后,所有IDE的内省和代码导航都能很好地工作。转到定义,转到实例,重构支持,当然还有搜索。

答案 8 :(得分:2)

我建议使用grin进行搜索,omelette使用plone和pydev-feature'Globals browser'(使用eclipse或aptana studio)。

答案 9 :(得分:2)

仅仅是因为答案不够......

如果您经常开发,那么使用Pydev安装Eclipse是非常值得的(或者更简单的是Aptana Studio - 这是一个经过修改的Eclipse),在这种情况下,查找工具就在那里。

答案 10 :(得分:1)

自从发现Emacs的rgrep命令以来,我的贪心生活更令人满意。

说我想在Plone的源代码中找到'IPortletDataProvider'。我这样做:

  1. M-x rgrep
  2. Emacs提示输入搜索字符串(IPortletDataProvider)
  3. ...然后搜索哪些文件(* .py)
  4. ...然后是哪个目录(〜/ Plone / buildout-cache / eggs)。如果我已经在编辑文件,则默认为该文件的目录,这通常就是我想要的。
  5. 结果显示在新缓冲区中。顶部是Emacs运行的find | xargs grep命令。所有比赛都会突出显示我可以使用标准文本搜索命令搜索缓冲区。最重要的是,我可以点击匹配上的Enter(或点击)打开该文件。

    这是一种非常好的工作方式。我喜欢我不必记住find | xargs grep参数序列,但是如果我需要的话,那就是那种力量。

    Emacs rgrep example

答案 11 :(得分:1)

OpenGrok是源搜索和导航的绝佳选择。但是,在Java上运行。

我真的希望有像http://opengrok.plone.org/

这样的东西