Sou fã da maneira como o Atom e o Sublime Text lidam com a dobra de linhas, onde a primeira linha de cada dobra é visível (completa com destaque de sintaxe) e um marcador é anexado ao final da linha que indica a dobra.
Veja a captura de tela abaixo comparando a dobradura de travessão do Vim (em cima) com a do Atom (em baixo):
O Vim dedica duas linhas para cada dobra. A primeira linha serve como cabeçalho e a segunda linha descreve algumas informações sobre a dobra (número de linhas e texto dentro da dobra).
O Atom usa apenas uma linha e usa um pequeno marcador no final da linha para indicar a dobra, juntamente com a cor adicionada aos números de linha à esquerda. O estilo dobrável do Atom usa menos espaço na tela, mas ainda comunica todas as informações que realmente preciso.
Sou parcial com o estilo de dobramento Atom. Parece mais limpo e consistente, na minha opinião, principalmente ao listar vários métodos ou atributos em uma linha (como na captura de tela acima).
Existe uma maneira de aproximar aproximadamente o estilo de dobramento do Atom no Vim?
from __future__ import braces
) ... Como você configurou a dobragem? E você pode colar esse trecho de código (ou outro que demonstre o problema)? O Vim dobra para uma única linha, mas, como o muru mencionou, suas dobras começam uma linha tarde.Respostas:
Duas linhas vs. uma linha
No Vim, todas as linhas dentro de uma dobra serão recolhidas em uma única linha, e a
'foldtext'
opção determina a sinopse dessas linhas (geralmente traços, o número de linhas dobradas e o conteúdo das primeiras (ou todas) linhas).No seu exemplo, no Vim, apenas o
{...}
próprio bloco de parâmetros é dobrado; a linha acima (que usa os parâmetros) não faz parte da dobra. Por outro lado, no outro editor, essa linha usando os parâmetros pertence à dobra e seu texto da dobra (para usar a terminologia do Vim) é o conteúdo dessa linha mais o marcador anexado.Adaptação
No Vim, as dobras podem ser geradas por diferentes meios (consulte
:help fold-methods
) e dependem'filetype'
do buffer. A dificuldade de incluir a linha acima na dobra depende disso; verifique com:setlocal foldmethod?
. Com a dobradura de indentação , não há nada que você possa influenciar; você precisa mudar para outro método. Para dobrar sintaxe , isso significaria adaptar as definições de sintaxe e poderia ser muito complicado. Você terá mais sorte se uma expressão for usada, mas isso ainda significaria entender e alterar a lógica. (É improvável que o autor do plugin do tipo de arquivo tenha fornecido uma configuração para influenciar isso.)Destaque de sintaxe da linha dobrada
Infelizmente, isso não é possível. O Vim sempre usa o
Folded
grupo de destaque para toda a linha dobrada. Você pode ajustá-lo através de:highlight
comandos no seu~/.vimrc
, mas a diferenciação individual da sintaxe será perdida.fonte
O Vim já exibe dobras como uma única linha. No entanto, nas
indent
dobras de Vim , todas as linhas que têm o mesmo recuo são incluídas em uma dobra. Portanto, na sua captura de tela, as linhas às quais você se refere como "cabeçalhos" (por exemplo, a que está começandocollection_base_url
) não estão dentro das dobras.Você pode obter algo semelhante à dobra do Atom usando o Vim
foldexpr
foldmethod
:Isso define uma expressão de dobra (consulte
:help fold-expr
) da seguinte maneira:"<N"
, onde N é definido como recuo. Isso diz ao Vim que uma dobra do nível N termina nessa linha.Atualizar
@alxndr pergunta nos comentários se é possível estender isso para incluir os
end
s ultrapassados de Ruby dentro das dobras. Você pode começar substituindo a" Calculate indent level
seção pelo seguinte:Como é, essa não é a solução mais robusta (por exemplo, ela falhará se a
end
instrução estiver na mesma linha, após ponto e vírgula). Você pode ajustar a expressão regular e o código ao redor para resolver isso, mas como agora você está analisando a sintaxe real do arquivo, suspeito que as coisas possam ficar muito mais complicadas antes de você ter uma boa solução.fonte
end
para terminar um bloco?...
no final da linha como símbolo de um bloco de texto dobrado muito útil e faz menos distrações do que é necessário destacar toda a primeira linha do bloco de texto como no vim. Eu tentei sua dobra acima com o comportamento de dobra padrão do vim, simples não funciona. Como ter dobra que dê uma marca no final da primeira linha do bloco de texto com python? Devo abrir uma nova pergunta? Acabei de testar novamente sua dobra, é realmente trabalhar muito bem com a linha de recuo. super Obrigado.