Como você dobra funções automaticamente?

12

Existe uma maneira de fazer o Vim dobrar funções com base na sintaxe de uma declaração de função?

Por exemplo, ter o vim ativar uma função como esta:

def foobar(foo,bar):
  if foo > bar:
    print "foo"
  elif foo < bar:
    print "bar"
  elif foo == bar:
    print "foobar"

Nisso:

+----- 7 lines: def foobar(foo,bar): -------------------------------------------------------------

Existe algum conjunto de comandos ou uma função que eu possa colocar no meu arquivo .vimrc para fazer isso?

Dom
fonte

Respostas:

12

Dado que seu exemplo está em Python, que depende da indentação correta de blocos de código, basta basear a dobragem nisso:

:set foldmethod=indent

Para mais informações sobre as variedades de dobras disponíveis, consulte : help foldmethod

jalanb
fonte
7

Certo:

set foldmethod=syntax

Você pode usar zcpara fechar uma dobra, zoabrir uma ou zaalternar.

Infelizmente, o Vim não inclui informações dobráveis ​​para Python por padrão, que você parece estar usando. Você pode usar um dos muitos recursos externos , no entanto.

Maçaneta
fonte
3
Para que isso funcione, o arquivo de sintaxe que você está usando deve fazer uso syn-fold. na minha instalação do vim74, apenas cerca de 10% dos arquivos de sintaxe o utilizam.
jalanb