如何在Python中使用emacs使用meta-dot(M-。)?
有没有相当于python的粘液?如何在Python中使用emacs使用meta-dot(M-。)?
例如,如果我将光标放在foo()上并执行M-。 (跳转到),我想看看函数foo的源定义
这应该不管富是在一些
1)本地项目目录
2)工作的〜/ .virtualenvs /酒吧/ lib中/在其他Python路径
4)虚拟ENV在使用中(即,它应该在我目前的virtualenv)
站点包3)
pymacs/ropemacs组合是否可以做到这一点?
为了避免您可以使用ETag -e和有找到你递归添加PY文件:
find . -type f -name '*.py' | xargs etags
M-。通常运行“find-tag
”功能。 您应该创建一个Python源文件的TAGS文件。然后你在做M-之前“visit-tags-table
”。这样,Emacs将跳转到标签的所有定义。类型C-u M-。跳转标签的下一个定义。请参阅find-tag文档以获取帮助。请教Emacs帮助知道如何从python源文件创建一个TAGS文件。
例如,您可以使用Exuberant Ctags创建TAGS文件。
转到您的Python文件的根目录,然后执行以下操作:
ctags -e -R .
标签文件是在项目的根目录下创建的。
我建议在看http://www.emacswiki.org/emacs/EtagsSelect为好,它提供了一个更好的接口,如果你绑定'M-.'到'的ETag选 - 查找 - tag' – phils 2010-08-17 22:13:27
随着根的ETag的,并且几个项目不会在相同包的不同安装(多个站点包?)之间混淆。或者至少,每次它弹出一个缓冲区问我*哪一个源defn我想去? – nunb 2010-08-18 05:01:15
您在每个项目的各自根目录(而不是系统的根目录)中创建一个TAGS文件。然后你在每个你感兴趣的TAGS文件上使用'visit-tags-table'。所有TAGS文件参考都附加到'tags-table-list'变量。然后,使用M-。 ,emacs在'tags-table-list'中引用的所有TAGS文件中搜索关键字。 – 2010-08-19 15:14:33
下将指数当前项目
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
这里提到的大多数答案都过时了。一个简单的解决方案是使用elpy作为M-.
而没有etags(这需要额外的工作)。
M-x package-install elpy
,然后再安装Python包
$ sudo pip install rope jedi
重新启动emacs的,打开任何蟒蛇文件并运行M-.
Elpy是完全记录,你可以阅读about M-.
here。
接受的答案错过了一个重要的观点,如果您执行etags
就像find . -type f -name '*.py' | xargs etags
那么每个文件每次都会生成每个TAGS文件。
做到这一点是如果你要包括从虚拟ENV现场包标识符将数据追加到与--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-*
回去!
我宁愿相当于粘液,也就是说,在代码/语义层面上,而不仅仅是在文本级别上咕py python。 Ropemacs或pymacs可能是我想要的,但我不知道它是否有助于M-。以任何方式。 – nunb 2010-08-18 05:02:34