我使用 vim 来编写我编写的所有代码。我最大的问题是我找不到一个好的 Python 代码折叠插件。我发现了两三个使用缩进的流行插件,但它们往往折叠得太少或太多。理想情况下,我希望它折叠如下:
- 折叠所有顶级类。
- 折叠所有顶层函数。
- 折叠所有类方法
仅此而已。我目前使用的插件还不错,但它倾向于折叠方法内的函数。它还会对类方法中具有不同缩进级别的代码块感到困惑(例如:for 循环后跟更多代码会导致 for 循环后的代码折叠)。
是否有人知道可以满足这些要求的插件,或者我应该弄清楚如何编写自己的插件?
这些是我过去尝试过的事情:
- 高效的 Python 折叠:完美折叠 Python 代码,只需一次按键即可切换- 不折叠类方法
- python_fold :python 的折叠表达式- 折叠随机代码块
答案1
简易折叠
我认为这是 vim 中 python 的最佳折叠插件。
它只不过是它需要做的:它正确地折叠类和函数/方法定义,并且不影响你的循环和条件块。
答案2
虽然他们没有适合你的插件,但有一些有用的答案这个 stackoverflow 问题。
具体来说,您可以尝试设置set foldnestmax=2
。这将在顶级函数中执行不必要的折叠,但除此之外可以满足您的要求。foldnestmax
表示不要折叠任何深度超过 x 的内容(与 foldlevel 相反,foldlevel 表示折叠深度超过 x 的所有内容)。如果您希望折叠足够智能,可以找到任何函数,那么您需要设置foldexpr
。
如果您使用 foldexpr,最好的办法是先在 vimscript 中尝试基本的折叠,直到您掌握它,然后再修改您提供的插件之一的代码。请确保(或更大),以便您可以看到您设置的折叠。我认为您只有在看到或 时set foldcolumn=1
才会增加折叠,但您可能需要和来确定折叠何时结束。class
def
v:foldstart
v:foldlevel
另外,尝试使用zO
递归打开折叠(因此,如果展开顶级函数,其中的所有内容都会展开)。