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:
Obrigado.
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:
Obrigado.
Respostas:
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 ..)
foldmethod
como syntax
era 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 fromstart
este é 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.
Como o """
é razoavelmente previsível, podemos simplificar start
e end
parecer algo como isto:
syn region foldImports start='"""' end='"""' fold keepend
Para ambos, start
e end
estamos 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.
foldingmethod
para syntax
em tampão.
fold
opções adicionais, e funciona muito bem para mim.
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.vim
e somente a fold
palavra - 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 String
porque:
HiLink pythonString String
Apenas definir uma região de sintaxe não é suficiente; você precisa vincular isso a um grupo de destaque .