Emacs中的Python代码折叠?

46

我有许多类和定义...

我希望在 classdef 前面添加 +- 按键,以折叠或打开该类(切换它)。

我该怎么做?


你更关心功能(代码折叠)还是加号、减号符号?Emacs 是基于键盘的,所以使用鼠标切换 +、- 没有太多意义。请参考 1085170 - sakisk
只需翻译文本内容:我只想看到类被折叠,然后再展开它,或者以其他方式。 - Mohammad Efazati
好的。看一下我给你的链接;链接中有关于Emacs折叠模式的参考资料,可能适合你。 - sakisk
你确定吗?仔细看看Stack Overflow上1085170中与Python相关的答案以及Emacs Wiki中Ruby的技巧。这两种方法都很合理,但由于Python代码没有像{}一样的块结构包装,所以需要付出一些努力。 - sakisk
我不知道Emacs可以进行代码折叠。这个问题是我最喜欢的之一! - swdev
2个回答

51

Hideshow 可以直接使用且可以折叠 Python 代码,它已内置于我的 Emacs 版本中 (24.3.1)。

我从未需要更多的命令:

M-x hs-minor-mode
M-x hs-hide-all
M-x hs-show-all
要切换使用C-c @ C-c,这可能需要重新绑定。您还可以在.emacs文件中设置一个钩子来启用hs-minor-mode,以便在打开.py文件时自动启用它。
我将其与以下内容结合使用以进行跳转。
M-x imenu <my_func_name>

1
这个很好用!但是当处理一个非常大的 Python 文件(~5000 行)时,随着我折叠更多的类,事情开始变得缓慢。如果我不折叠太多的类,那还好。特别是当我折叠一个类,大约 1500 行时,速度真的会变慢。我也在使用 Elpy,这可能是一个因素。 - modulitos
8
这个 Python 文件有 5000 行!这么大的文件有什么好的理由吗? - cammil
2
@cammil也许不是,但我认为文本编辑器不是实施这种规范的合适场所。如果没有别的,当我去重构它时,我应该能够使用代码折叠来帮助管理5000行的文件。 - user240438
我该如何打印折叠的代码?ps-print-buffer 总是导出未折叠的代码。 - Torsten Bronger
关于 hs-minor-mode 的所有其他命令 - Arun Kumar Khattri
请注意,对于Python来说,Hideshow只能折叠整个函数。它无法处理任意范围(如循环或条件语句)。 - John de Largentaye

6
你可以使用CEDET实现代码折叠(和更多功能)。使用CEDET时,你应该考虑在emacs配置文件中添加以下设置:
(global-semantic-folding-mode t)

CEDET可以处理Python和其他语言。
关于编程时如何使emacs更加方便,其他想法可以在StackOverflow上找到。

8
CEDET似乎已经随Emacs 24一起提供,但这个函数不可用。这在两年内是否有所改变? - Sean Allred

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接