Para mí, el plegado ideal es doblar solo los bloques classy def, el doblado con sangría es demasiado para mi gusto. Creo que una solución elegante es utilizar el sistema de sintaxis como esta uno mencionado por Tomas. Sin embargo, este está destinado a reemplazar el archivo de sintaxis original y puede terminar siendo más antiguo que el original (es decir, ese script no menciona la sintaxis de Python 3).
Mi solución es colocar en la ~/.vim/syntaxcarpeta un archivo llamado python.vimsolo con las líneas importantes (tomadas del script anterior):
syn match pythonDefStatement /^\s*\%(def\|class\)/
\ nextgroup=pythonFunction skipwhite
syn region pythonFunctionFold start="^\z(\s*\)\%(def\|class\)\>"
\ end="\ze\%(\s*\n\)\+\%(\z1\s\)\@!." fold transparent
hi link pythonDefStatement Statement
Entonces simplemente active el plegado con :set foldmethod=syntax.