Dobrando docstrings Python

8

De acordo com o WIKI , os scripts podem ser dobrados com base na sintaxe. Alguém tem uma solução para dobrar docstrings Python?

Basicamente, tudo que eu preciso é dobrar """ text between triple quotation marks """, assim:

insira a descrição da imagem aqui

Obrigado.

asv
fonte
11
Deseja dobrar apenas as seqüências de caracteres, além de dobrar o código Python?
Martin Tournoij 17/03
@Carpetsmoker, apenas docstrings. Até o momento, não consegui obter dobras python confiáveis semelhantes aos IDEs de pleno direito.
Asv

Respostas:

3

Existem alguns fatores estranhos em jogo que devemos considerar ao jogar com folds (eles são complicados e não são fáceis de entender sem se aprofundar nos documentos ..)

  • definir foldmethodcomo syntaxera meu problema quando estava lutando contra fold, mas vamos dar uma olhada nos documentos para obter mais informações ..

Sintaxe de dobra SYNTAX

Uma dobra é definida por itens de sintaxe que possuem o argumento "dobra". |: dobra de sincronização |

O nível de dobra é definido aninhando dobras. O encaixe das dobras é limitado por 'foldnestmax'.

Tenha cuidado para especificar a sincronização de sintaxe adequada. Se isso não for feito corretamente, as dobras podem diferir do destaque exibido. Isso é especialmente relevante ao usar padrões que correspondem a mais de uma linha. Em caso de dúvida, tente usar a sincronização de força bruta:

    :syn sync fromstart

O principal a ser observado é que sync fromstarteste é um auxiliar útil se você tiver regex que corresponderia ao longo do arquivo e só quiser pegar o cabeçalho. No seu caso, você deve poder ignorar isso, mas apenas algo para estar ciente.

  • digitalização regex de cima para baixo

Como o """é razoavelmente previsível, podemos simplificar starte endparecer algo como isto:

syn region foldImports start='"""' end='"""' fold keepend

Para ambos, starte endestamos apenas tentando corresponder '"""'(ou regexp) às tags de script. Eu não testei o código acima, pois não sou um cara de python, mas aposto que você pode descobrir isso daqui.

Dan Bradbury
fonte
Obrigado! Ele funciona depois de adicionar a linha a ~ / .vim / depois / sintaxe / python.vim e ajuste manualmente foldingmethodpara syntaxem tampão.
asv 23/03
... mas quebra os destaques dos documentos. A vida é dura.
23/03
caramba .. Eu pessoalmente desabilitei a desativação na minha configuração com um comentário profano sobre meus sentimentos em relação ao recurso: | espero um pouco mais regex pirataria pode fazer as coisas de trabalho (plugins de verificação id [grep dobrar palavras-chave] se o seu quase lá)
Dan Bradbury
Usei as definições de região de sintaxe fornecidas em stackoverflow.com/a/16051080/455009 para direcionar os documentos a serem destacados como comentários, sem afetar as seqüências normais de aspas triplas. Experimente aqueles com foldopções adicionais, e funciona muito bem para mim.
ches
1

Aqui está um método melhor que preservará todo o destaque dentro de cadeias de caracteres triplas:

syn region  pythonString matchgroup=pythonTripleQuotes 
      \ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend fold
      \ contains=pythonEscape,pythonSpaceError,pythonDoctest,@Spell

Adicione isso a ~/.vim/after/syntax/python.vim.

Este comando é obtido exatamente de /usr/share/vim/vim74/syntax/python.vime somente a foldpalavra - chave foi adicionada. Por que isso preserva o destaque quando a resposta de Dan não? A chave é que isso tem:

contains=pythonEscape,pythonSpaceError,pythonDoctest

Normalmente, o Vim aplica apenas uma região de sintaxe, mas contains=você pode dizer que uma região de sintaxe pode conter outras regiões de sintaxe.

Também é destacado como um Stringporque:

HiLink pythonString           String

Apenas definir uma região de sintaxe não é suficiente; você precisa vincular isso a um grupo de destaque .

Martin Tournoij
fonte