Supongamos que estoy editando un código de Python en vim que se parece un poco a:
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")
Preferiría volver a formatear esto para que se redirija al textwidth
que he configurado:
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")
¿Hay una forma fácil de hacer esto? Si este fuera un párrafo de texto convencional, gqipo similar sería útil, pero esto no manejará las comillas utilizadas para delinear la cadena.
Nota : Estoy preguntando específicamente sobre Python aquí, pero idealmente, esta respuesta sería relevante para muchos tipos de lenguaje de programación que permiten la continuación de cadenas.
formatting
line-breaks
filetype-python
Andrew Ferrier
fuente
fuente
"""multi-line string"""
?Respuestas:
Oh, esa es una pregunta difícil. Creo que el mejor enfoque es posiblemente una macro, pero más probablemente un complemento. Aquí hay un ejemplo que preparé (necesito un pasatiempo mejor). Parecía funcionar para mí, pero necesitaría el complemento de sangría de Python para sangrar correctamente. Pruébalo.
Entonces podría usarlo
:call ReformatMultiLines()
y / o usarlo en un mapeo.fuente
Si esto ocurre con frecuencia, sería mejor buscar un complemento o usar la función de @Sukima. Sin embargo, si estuviera haciendo esto sobre la marcha, esto es lo que probablemente haría:
Agregue una nueva línea después del par de apertura y antes del par de cierre para que las cadenas estén en líneas separadas.
Seleccione líneas con cadenas y elimine las comillas circundantes:
:norm ^x$x
:set tw-=2
gvgq
:set tw+=2
gv:norm I"<Esc>A"
. En lugar de<Esc>
querer insertar un escape literal, escriba ctrl-v seguido de la tecla de escape. Como mapeo jj para escapar, generalmente solo escribo jj aquí.fuente
:set tw-=2
resulta enE487: Argument must be positive: tw-=2
. ¿Es incorrecta la sintaxis?:set tw?
. Supongo que tiene el ancho de texto establecido en 0. Estos pasos suponen que el ancho de texto comienza como la cantidad de caracteres que desea por línea.s/2/3/
agregar un espacio antes de la cita de cierre, su cadena larga no tendría un espacio adecuado entre las palabras.Analizar y formatear código es difícil, especialmente para lenguajes dinámicos como Python.
En lugar de intentar analizar Python en Vimscript, le recomiendo que pueda usar un formateador externo como yapf . Con mi respuesta aquí , puede escribir esto automáticamente al escribir con:
La
s:write_cmd()
función está en la otra respuesta: no la agregaré aquí, así que no tendré que actualizarla en dos lugares si encuentro un error :-)También puede configurar
formatprg
parayapf
y dar formato manualmente congq
.fuente
yapf
parece no funcionar. Sin embargo, estoy de acuerdo en que parece una herramienta útil.Las siguientes funciones y las asignaciones correspondientes me resolvieron este problema:
fuente