有没有相当于蟒蛇的粘液?
例如,如果我将光标放在 foo() 上并执行 M-。(跳转到定义)我想看看函数 foo 的源码定义
无论 foo 是否在
1)本地项目目录
2) 在一些 ~/.virtualenvs/bar/lib/site-packages
3)在其他一些python路径中
4)虚拟环境正在使用中(即,它应该在我当前的虚拟环境中查看)
pymacs/ropemacs 组合能做到这些吗?
为了避免 -e 您可以使用 etags 并通过 find 递归地添加 py 文件:
find . -type f -name '*.py' | xargs etags
米-。通常运行“ find-tag
”功能。您应该为您的 python 源文件创建一个 TAGS 文件。然后你“ visit-tags-table
”在做一个M-之前。这样,Emacs 将跳转到标签的所有定义。类型 Cu M-。跳转标签的下一个定义。请参阅 find-tag 文档以获取帮助。请参阅 Emacs 帮助以了解如何从 python 源文件创建 TAGS 文件。
例如,您可以使用Exuberant Ctags创建 TAGS 文件。
转到 python 文件的根目录并执行以下操作:
ctags -e -R .
TAGS 文件通常在项目的根目录中创建。
以下将索引您当前的项目
find . -type f -name '*.py' | xargs etags
但是如果你想索引你导入的库。您首先激活您的 virtualenv。然后使用which
python 来检测你的库在哪里,然后将它们通过管道传输到 etags。
workon my-project # if using virtualenvwrappwer
source bin/activate # if using virtualenv
find ${$(which python)/\/bin\/python/} -type f -name '*.py' | xargs etags
接受的答案错过了一个重要的点,如果你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 版本
试试 emacs 的anaconda-mode和company-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-*
回去!