pyfold is awesome folding for python files in vim. Inspired by
the many methods of folding away python functions and classes,
pyfold uses foldexpr to fold clases, methods, and functions,
without leaving any blank lines between them.
pyfold is also configurable to fold multi-line sections between braces, brackets, and parentheses.
pyfold also makes the foldtext nicer. When folding a function or method with decorators, pyfold will make the foldtext look like
@decorator: @another_decorator: my_func(args):When folding braces, brackets, or parentheses, pyfold will add the correct close brace, bracket, or parentheses. A small detail but makes the folds look so much nicer.
- Pathogen:
git clone git://github.com/ryankuczka/vim-pyfold.git ~/.vim/bundle - Vundle:
Plugin 'ryankuczka/vim-pyfold' - NeoBundle:
NeoBundle 'ryankuczka/vim-pyfold' - vim-plug:
Plug 'ryankuczka/vim-pyfold'
pyfold uses set foldmethod=expr to function. This can cause vim to slow down
a lot due to vim recalculating folds all the time. If vim gets slow, you can
temporarily disable or toggle pyfold on and off with the following commands.
:PyFoldEnable
:PyFoldDisable
:PyFoldToggleFastFold is a great plugin which will only
recalculate folds when saving which can greatly improve performance when using fold
methods such as expr. I highly recommend installing it alongside pyfold for the
best performance.
Unfortunately, due to how FastFold works, if something else changes the foldmethod, such as diff mode, when the foldmethod would be changed back FastFold keeps it at
manualand pyfold must be re-enabled via:PyFoldEnable
class Foo(object):
pass
class Bar(object):
passbecomes
+- 4 lines: class Foo(object):-----------------------------------------------
+- 2 lines: class Bar(object):-----------------------------------------------
instead of
+- 2 lines: class Foo(object):-----------------------------------------------
+- 2 lines: class Bar(object):-----------------------------------------------
with other methods.
def foo():
pass
@my_decorator
def bar():
passbecomes
+- 3 lines: def foo():-------------------------------------------------------
+- 3 lines: @my_decorator: bar():--------------------------------------------
Most python folding methods don't fold away multi-line sections between braces, brackets, and parentheses which I always found annoying. Now:
# With g:pyfold_braces = 1 (Default: 1)
MY_DICT = {
'foo': 'bar',
}
# With g:pyfold_brackets = 1 (Default: 1)
MY_LIST = [
'foo',
'bar',
]
# With g:pyfold_parens = 1 (Default: 0)
MY_TUPLE = (
'foo',
'bar',
)becomes
# With g:pyfold_braces = 1 (Default: 1)
+- 3 lines: MY_DICT = {}-----------------------------------------------------
# With g:pyfold_brackets = 1 (Default: 1)
+- 4 lines: MY_LIST = []-----------------------------------------------------
# With g:pyfold_parens = 1 (Default: 0)
+- 4 lines: MY_TUPLE = ()----------------------------------------------------