Vamos supor que estou editando algum código Python no vim que se parece com:
myobj.myfunc("Some string parameter that goes on and on and on and on and sometimes doesn't"
"split very"
"neatly over different lines so that"
"it is formatted attractively")
Eu preferiria reformatar isso para que reflita o que textwidth
eu defini:
myobj.myfunc("Some string parameter that goes on and on and "
"on and on and sometimes doesn't split very "
"neatly over different lines so that it is "
"formatted attractively")
Existe uma maneira fácil de fazer isso? Se esse fosse um parágrafo de texto convencional gqipou similar seria útil, mas isso não tratará das aspas usadas para delinear a string.
Nota : Estou perguntando especificamente sobre Python aqui, mas, idealmente, essa resposta seria relevante para muitos tipos de linguagem de programação que permitem a continuação de strings.
formatting
line-breaks
filetype-python
Andrew Ferrier
fonte
fonte
"""multi-line string"""
?Respostas:
Oh, isso é difícil. Eu acho que a melhor abordagem é possivelmente uma macro, mas provavelmente um plugin. Aqui está um exemplo que eu criei (preciso de um hobby melhor). Pareceu funcionar para mim, mas seria necessário o plugin de recuo python para recuar corretamente. Experimente.
Então você pode usá-lo com
:call ReformatMultiLines()
e / ou usá-lo em um mapeamento.fonte
Se essa é uma ocorrência regular, é melhor procurar um plug-in ou usar a função do @Sukima. Se eu estivesse fazendo isso rapidamente, aqui está o que eu provavelmente faria:
Adicione uma nova linha após o ponto de abertura e antes do ponto de fechamento, para que as strings estejam em linhas separadas.
Selecione linhas com strings e exclua aspas:
:norm ^x$x
:set tw-=2
gvgq
:set tw+=2
gv:norm I"<Esc>A"
. Em vez de<Esc>
querer inserir uma fuga literal, digite ctrl-v seguido pela tecla Escape. Desde que mapeio jj para escapar, geralmente apenas digito jj aqui.fonte
:set tw-=2
resulta emE487: Argument must be positive: tw-=2
. A sintaxe está incorreta?:set tw?
. Meu palpite é que você tenha a largura do texto definida como 0. Essas etapas pressupõem que a largura do texto começa como o número de caracteres que você deseja por linha.s/2/3/
adicionar e um espaço antes da citação de fechamento, sua cadeia longa não teria espaçamento adequado entre as palavras.A análise e a formatação do código são difíceis, especialmente para linguagens dinâmicas como Python.
Em vez de tentar analisar Python no Vimscript, recomendo que você possa usar um formatador externo como o yapf . Com a minha resposta aqui, você pode escrever isso automaticamente ao escrever com:
A
s:write_cmd()
função está na outra resposta - não a adicionarei aqui, portanto não precisarei atualizá-la em dois lugares se encontrar um bug :-)Você também pode definir
formatprg
ayapf
e formatá-lo manualmente comgq
.fonte
yapf
parece não ser suficiente. No entanto, eu concordo que parece uma ferramenta útil.As seguintes funções e mapeamentos correspondentes resolveram esse problema para mim:
fonte