如何在Emacs中使用Python的meta-dot (M-.)?

25 投票
6 回答
10209 浏览
提问于 2025-04-16 02:54

有没有类似于slime的工具可以用在Python上?

举个例子,如果我把光标放在foo()上,然后按M-.(跳转到定义),我希望能看到foo这个函数的源代码定义。

这个功能应该可以在以下情况下都能使用:

1) 在本地项目目录中

2) 在某个~/.virtualenvs/bar/lib/site-packages目录中

3) 在其他的Python路径中

4) 使用虚拟环境时(也就是说,它应该能在我当前的虚拟环境中查找)

pymacs和ropemacs的组合能做到这些吗?

6 个回答

5

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 .

通常,TAGS 文件会在项目的根目录下创建。

9

这里提到的大部分答案都过时了。一个简单的解决办法是使用elpy来实现M-.功能,而不需要etags(这需要额外的工作)。

按照这里的说明安装 elpy

M-x package-install elpy

然后安装python的相关包。

$ sudo pip install rope jedi

重启emacs,打开任何一个python文件,然后运行M-.

elpy有详细的文档,你可以在这里阅读关于M-.的内容

18

为了避免使用 -e 这个选项,你可以使用 etags,并通过 find 命令递归地添加所有的 py 文件:

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

撰写回答