23

有没有相当于蟒蛇的粘液?

例如,如果我将光标放在 foo() 上并执行 M-。(跳转到定义)我想看看函数 foo 的源码定义

无论 foo 是否在

1)本地项目目录

2) 在一些 ~/.virtualenvs/bar/lib/site-packages

3)在其他一些python路径中

4)虚拟环境正在使用中(即,它应该在我当前的虚拟环境中查看)

pymacs/ropemacs 组合能做到这些吗?

4

6 回答 6

16

为了避免 -e 您可以使用 etags 并通过 find 递归地添加 py 文件:

find . -type f -name '*.py' | xargs etags
于 2010-08-17T14:45:48.457 回答
8

这里提到的大多数答案都已过时。一个简单的解决方案是在没有 etags 的情况下使用 elpy M-.(这需要额外的工作)。

安装这里提到的elpy

M-x package-install elpy

然后安装python包

$ sudo pip install rope jedi

重新启动 emacs ,打开任何 python 文件并运行M-.

Elpy 有完整的文档,你可以M-.这里阅读。

于 2015-09-14T11:49:04.937 回答
4

米-。通常运行“ find-tag”功能。您应该为您的 python 源文件创建一个 TAGS 文件。然后你“ visit-tags-table”在做一个M-之前。这样,Emacs 将跳转到标签的所有定义。类型 Cu M-。跳转标签的下一个定义。请参阅 find-tag 文档以获取帮助。请参阅 Emacs 帮助以了解如何从 python 源文件创建 TAGS 文件。

例如,您可以使用Exuberant Ctags创建 TAGS 文件。

转到 python 文件的根目录并执行以下操作:

ctags -e -R .

TAGS 文件通常在项目的根目录中创建。

于 2010-08-17T11:38:44.843 回答
2

以下将索引您当前的项目

find . -type f -name '*.py' | xargs etags

但是如果你想索引你导入的库。您首先激活您的 virtualenv。然后使用whichpython 来检测你的库在哪里,然后将它们通过管道传输到 etags。

workon my-project # if using virtualenvwrappwer
source bin/activate # if using virtualenv

find ${$(which python)/\/bin\/python/} -type f -name '*.py' | xargs etags
于 2015-03-28T16:53:14.410 回答
2

接受的答案错过了一个重要的点,如果你etags像这样执行,find . -type f -name '*.py' | xargs etags那么每次都会为每个文件生成 TAGS 文件。

正确的做法是将数据附加到现有的 TAGS 文件--append

rm -f TAGS
find . -type f -name '*.py' -print0 | xargs -0 etags --append

此外,如果您想包含来自虚拟环境站点包目录的标识符(例如:)~/.virtualenvs/bar/lib/site-packages

SITEPACKAGES=$(cdvirtualenv;pwd)/lib/python3.6/site-packages/
find $SITEPACKAGES -type f -name '*.py' -print0 | xargs -0 etags -a

*调整python3.6到你当前的 Python 版本

于 2017-06-25T14:40:14.610 回答
1

试试 emacs 的anaconda-modecompany-anaconda包。更新配置:

(eval-after-load "company"
 '(add-to-list 'company-backends 'company-anaconda))
(add-hook 'python-mode-hook 'anaconda-mode)
(add-hook 'python-mode-hook 'company-mode)

使用 切换到 virtualenv pythonic-activate,如果有的话。

现在你有M-.,你可以按M-*回去!

于 2018-03-06T10:34:55.697 回答