unix - commands - e37 no write since last change add to override
El ancho de texto VIM no tiene efecto (6)
Esto parece una pregunta tonta, pero no puedo encontrar una respuesta en Internet (o en la ayuda de VIM). Estoy usando VIM 7.2 en Mac OS X. Todo lo que quiero hacer es envolver mis líneas en 72 caracteres, pero haciendo
:set textwidth=72
no tiene efecto. El ancho de texto se establece correctamente (puedo ver que cuando solo pregunto ": establecer ancho de texto"), pero no se ajustan las líneas existentes ni las nuevas que escribo después de configurar el ancho de texto. Si empiezo una nueva línea, todavía no se ajusta. Abre y cierra el archivo, sin cambios. También he intentado: set wrapmargin = 72 (con textwidth = 0), sin efecto.
¿Que me estoy perdiendo aqui?
Estaba buscando una respuesta a la misma pregunta y tuve que revolver un poco antes de encontrar la solución en los documentos VIM. Entonces, pensé que actualizaría el hilo y le ahorraría a otros el tiempo.
El problema en mi caso fue que el ftplugin predeterminado estaba deshabilitando el ancho de texto.
Simplemente actualizar su .vimrc con ( :set tw=79 && :set formatoptions+=t
) no funcionará ya que los fplugins se obtienen después de vimrc.
Aquí están los pasos que seguí:
1) averigüe cuáles son sus opciones de formato actuales (dentro de vim)
:set formatoptions?
formatoptions=croql (note no ''t'')
2) cree un archivo filetype.vim como lo sugiere vimdocs ( http://vimdoc.sourceforge.net/htmldoc/filetype.html#ftplugin-overrule )
Overrule the settings after loading the global plugin.
You must create a new filetype plugin in a directory from the end of
''runtimepath''. For Unix, for example, you could use this file:
vim ~/.vim/after/ftplugin/fortran.vim
In this file you can change just those settings that you want to change.
3) agregue la línea :set formatoptions+=t
&& :set textwidth=79
en ese archivo.
Voila! La próxima vez que abra el archivo, establecerá el ancho de texto en los caracteres que desee.
Como ayuda para la depuración, siempre puede verificar qué archivo está anulando la configuración de vimrc al anteponer su comando con verbose. Por ejemplo, si quiero comprobar quién actualizó las opciones de formato por última vez, escribiría
:verbose set formatoptions?
formatoptions=croqlt
Last set from ~/.vim/after/ftplugin/fortan.vim
Intente gggqG
para aplicar el nuevo ancho de texto a todo el búfer.
-
gg
significa: ir al principio del búfer -
gq
significa: reformatear el texto incluido en la moción -
G
significa: ir al final del búfer
(Funcionará si las opciones de formato se configuran correctamente, como se detalla en la publicación de Zyx)
Por otro lado, también puede mostrar su texto existente con un ancho de 72 caracteres agregando una línea de modeline
al principio o al final de su archivo. Ver :help modeline
Algo como vim:tw=72
debería funcionar.
Que hace
:set formatexpr?
:set indentexpr?
:set cindent?
:set filetype?
:set paste?
:filetype
impresión.
Al menos uno de ellos (y creo que todos) anulará la configuración de textwidth
de textwidth
.
Por ejemplo, si está editando un archivo fuente de C, las reglas de sangría C anulan el textwidth
.
Tuve este mismo problema y encontré el siguiente problema resuelto lo suficientemente bien para mí:
autocmd FileType python setlocal textwidth=79 formatoptions+=t
Siéntase libre de cambiar python
para que sea su tipo de archivo de elección (por ejemplo, *
o la lista separada por comas python,ruby,go,sh,javascript
)
Ver
:h fo-table
para detalles de lasformatoptions
deformatoptions
Vim no hará nada a menos que sea solicitado. textwidth
tendrá un efecto para las líneas editadas actualmente si tiene t
(solo para no comentarios), c
(solo para comentarios) o ambas formatoptions
de formatoptions
(si a
no está presente allí, entonces se enviará automáticamente solo cuando llegue al margen configurado por textwidth
de textwidth
), o si usa gq
para reformatear su texto. Si no me equivoco, puede configurar formatexpr
o formatprg
para que el textwidth
se ignore.
set formatoptions+=t
This puede ayudarte