Yo uso gvim para escribir correos electrónicos y uso tw=72
para romper largas colas. Ahora también edito encabezados de correo básicos en el mismo documento, por ejemplo, estoy agregando destinatarios a mi correo. Ahora con tw=72
él también se rompe cada vez después de 72 caracteres.
¿Cómo puedo configurar tw=0
las primeras 4 líneas (esa es la parte del encabezado) y tw=72
el resto del documento?
Mis formaciones se ven así, si eso es relevante:
set fo+=tcqn
formatting
mxmehl
fuente
fuente
textwidth
se aplica a todo el búfer.line('.') < 5
, o comprobando si la línea comienza con un encabezado de correo electrónico (por ejemploFrom:
,To:
, etc.).Respuestas:
Gracias al comentario de @ Carpetsmoker sobre mi pregunta, pude resolver esto exactamente como quería.
Con la siguiente función en .vimrc (o en mi caso en un archivo especial que solo se carga al editar mis correos electrónicos), tw se establece en 500 si el número de línea es menor que 5, de lo contrario es 72. Con
au CursorMovedI
esto se verifica cada vez que el cursor se mueve.Si alguien planea implementar esto, considere reemplazar el comodín
au CursorMovedI *
con una ruta fija o sufijo de archivo.fuente
Una alternativa más robusta a la respuesta de mxmehl.
Si usa
filetype=mail
Vim, resaltará los encabezados por usted:Podemos usar la información de sintaxis para determinar si una línea es un encabezado y establecer el ancho de texto en consecuencia.
El nombre de la sintaxis de las cabeceras son
mailHeaderKey
,mailSubject
,mailHeaderEmail
, ymailHeader
. Descubrí esto mirando/usr/share/vim/vim74/syntax/mail.vim
.La razón por la que prefiero esta solución es que no depende de números de línea arbitrarios, sino que funciona igualmente correcto para correos electrónicos con un encabezado y veinte encabezados.
fuente
Puede lograr esto usando autocmds. Puede incluirlos en su vimrc, pero generalmente es mejor incluirlos en un tipo de archivo, como se explica aquí .
Entonces podría usar lo siguiente:
Si prefiere usarlo sin un complemento de tipo de archivo, deberá reemplazarlo
<buffer>
con un patrón de archivo.La idea es cambiar el
'textwidth'
cuando ingresas al modo de inserción y restaurarlo cuando lo dejas.Si normalmente navega en el texto mientras está en modo de inserción (por ejemplo: usando las teclas de flecha), puede mejorarlo en función del enlace mencionado por @Carpetsmoke: evite que Vim rompa los enlaces a mitad de la etiqueta en el marcado.
fuente
No creo que esto sea posible. Sin embargo, hay un par de soluciones.
Podrías escribir tu encabezado y luego
:set tw=72
. Comotw
no se aplica retroactivamente al texto que ya está en su búfer,Puede escribir todo con
:set tw=0
y luego, una vez que haya terminado, pasar a la línea 4:set tw=72
, ygqG
. O, si no tiene ganas de hacerlo manualmente, puede macro o mapearlo. Por ejemplo, ambos funcionarían:("r" para "reformatear")
Incluso podría configurar que esto suceda automáticamente cuando cierre vim, suponiendo que desea formatearlo cuando cierre vim, y que haya un tipo de archivo que use solo para correos electrónicos. Por ejemplo, si todos sus correos electrónicos tuvieran la
.email
extensión, podría hacer lo siguiente:Por supuesto, tendría que cambiar
*.email
a cualquier extensión de archivo que realmente use. Si utiliza algo así.txt
, yo no recomiendo esto, ya que se hace un lío con todos los.txt
archivos que tiene.fuente