如何在 python 和 emacs 中使用元点 (M-.)?

发布于 2024-09-14 12:13:14 字数 292 浏览 5 评论 0原文

python 是否有相当于 slime 的东西?

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

这应该有效,无论 foo 是否在

1) 本地项目目录

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

3) 中在其他一些 python-path

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

pymacs/ropemacs 组合是否会执行此操作?

Is there an equivalent of slime for python?

For example, if I position the cursor on foo() and do M-. (jump to definition) I would like to see the source definition of the function foo

This should work regardless of whether foo is in

1) the local project directory

2) in some ~/.virtualenvs/bar/lib/site-packages

3) in some other python-path

4) virtual env is in use (ie, it should look in my current virtualenv)

Does the pymacs/ropemacs combination do any of this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

暮年 2024-09-21 12:13:14

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

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

To avoid the -e you can use etags and with a find you recursively add the py file:

find . -type f -name '*.py' | xargs etags
墨落成白 2024-09-21 12:13:14

这里提到的大多数答案都已经过时了。一个简单的解决方案是使用 elpy 进行 M-. 而不使用 etags(这需要额外的工作)。

安装按照此处所述安装 elpy

M-x package-install elpy

然后安装 python 包

$ sudo pip install rope jedi

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

Elpy 已完整记录,您可以阅读 关于 M-. 这里

Most of the answers mentioned here are outdated. A simple solution is to use elpy for M-. without etags(which requires additional work).

Install elpy as mentioned here.

M-x package-install elpy

and then install python packages

$ sudo pip install rope jedi

Restart emacs , open any python file and run M-.

Elpy is fully documented, you can read about M-. here.

非要怀念 2024-09-21 12:13:14

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

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

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

ctags -e -R .

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

M-. normally runs the "find-tag" function.
You should create a TAGS file of your python source files. Then you "visit-tags-table" before doing a M-.
That way, Emacs will jump to all the definitions of the tag. Type C-u M-. to jump the next definition of your tag. See find-tag documentation for help. Consult Emacs help to know how to create a TAGS file from python source files.

You can for example use Exuberant Ctags for creating the TAGS file.

Go to the root directory of your python files and do this :

ctags -e -R .

A TAGS file is normally created at the root directory of the project.

蝶舞 2024-09-21 12:13:14

以下内容将索引您当前的项目

find 。 -类型 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

The following will index your current project

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

But if you want to index your imported libs. You first activate your virtualenv. Then use which python to detect where your libs are and then pipe them to etags.

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

find ${$(which python)/\/bin\/python/} -type f -name '*.py' | xargs etags
我ぃ本無心為│何有愛 2024-09-21 12:13:14

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

正确的方法是使用 --append 将数据附加到现有的 TAGS 文件,例如

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 版本

Accepted answer misses an important point, if you execute etags like find . -type f -name '*.py' | xargs etags then the TAGS file would be generated every time for each file.

The correct way to do it is to append data to the existing TAGS file with --append like

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

Also if you want to include identifiers from virtual env site packages dir (e.g.: ~/.virtualenvs/bar/lib/site-packages):

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

*adjust python3.6 to your current Python version

渔村楼浪 2024-09-21 12:13:14

尝试 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)

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

现在您已经有了 M-.,您可以按 M-* 返回!

Try emacs's anaconda-mode and company-anaconda packages. Update config:

(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)

Switch to virtualenv with pythonic-activate, if you have one.

Now you've got M-. and you can press M-* to go back!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文