se ignoran las formateadas en vimrc


9

Vim continúa automáticamente un comentario cuando presiono Enter en el modo Insertar, lo que me parece útil.

Sin embargo, no quiero que el comentario continúe después de presionar 'o' desde el modo normal para insertar una nueva línea debajo del final del comentario.

Leí que necesito eliminar la opción ode mi formatoptions, así que puse esta línea justo al final de mi archivo vimrc:

set formatoptions-=o

Pero no ha cambiado nada, y cuando ejecuto :set formatoptionsdesde iside of vim me muestra que mis formaciones son croql.

¿Cómo me deshago de la 'o'?

Editar:

He seguido algunos pasos señalados en los comentarios de Sato Katsura:

La solución comienza con la ejecución :verb set fopara ver dónde se modificaron por última vez las formaciones

Aquí está la salida a verb set fo:

  formatoptions=croql
        Last set from /usr/share/vim/vim73/ftplugin/vim.vim


1
@DJMcMayhem Eso no resuelve mi problema. Como puede ver, he tomado los enfoques recomendados por las respuestas a esa pregunta, y el comportamiento de vim no ha cambiado.
theonlygusti

1
Si, lo veo. Fui demasiado apresurado con mi voto cerrado, así que me he retractado ahora. Sin embargo, ahora parece un problema con usted .vimrc, por lo que no podemos ayudarlo hasta que lo publique. Supongo que un complemento lo cambia, o no está siendo fuente correctamente.
James

2
Básicamente, la pregunta es "¿por qué no funciona la línea set formatoptions-=oen mi vimrc?", Que esto deshabilita los comentarios cuando presionar oes una coincidencia :-)
Martin Tournoij

@Carpetsmoker, sí ... ¿necesita edición?
theonlygusti

Respuestas:


8

Cuando vimcomienza, se ejecuta $VIMRUNTIME/ftdetect.vimpara averiguar qué tipo de archivo está editando; luego, si lo ha 'ftplugin'configurado, obtiene $VIMRUNTIME/ftplugin.vimlas fuentes $VIMRUNTIME/ftplugin/&filetype.vim(consulte :help startuppara obtener más detalles).

Puede alterar o anular $VIMRUNTIME/ftplugin.vimo $VIMRUNTIME/ftplugin/&filetype.vim. Cree una carpeta y subcarpeta en su directorio de inicio llamado .vim/after.

Si desea anular las opciones de formato para todos los complementos de tipo de archivo, edite $HOME/.vim/after/ftplugin.vim, de lo contrario edite $HOME/.vim/after/ftplugin/lua.vim(o reemplace luapor el idioma que sea, en su caso vim). Para una explicación adecuada de cómo funciona esto, vea :help 'runtimepath'(y :help :runtime).

Ponga el siguiente contenido en el archivo:

set formatoptions-=o

Puede ver si funcionó ejecutando :scriptnames. Debería obtener una lista como la siguiente:

  1: H:\script\vim\vimrc
  2: H:\script\vim\syntax\syntax.vim
  3: H:\script\vim\syntax\synload.vim
  4: H:\script\vim\syntax\syncolor.vim
  5: H:\script\vim\filetype.vim
  6: ~\vimfiles\ftdetect\log.vim
  7: ~\vimfiles\ftdetect\rdp.vim
  8: ~\vimfiles\ftdetect\scratch.vim
  9: ~\vimfiles\ftdetect\sqlite.vim
 10: ~\vimfiles\ftdetect\todo.vim
 11: H:\script\vim\ftplugin.vim
 12: ~\vimfiles\after\ftplugin.vim
 13: ~\vimfiles\colors\desert.vim
 14: H:\script\vim\defaults.vim
 15: H:\script\vim\plugin\getscriptPlugin.vim
 16: H:\script\vim\plugin\gzip.vim
 17: H:\script\vim\plugin\logiPat.vim
 18: H:\script\vim\plugin\manpager.vim
 19: H:\script\vim\plugin\matchparen.vim
 20: H:\script\vim\plugin\netrwPlugin.vim
 21: H:\script\vim\plugin\rrhelper.vim
 22: H:\script\vim\plugin\spellfile.vim
 23: H:\script\vim\plugin\tarPlugin.vim
 24: H:\script\vim\plugin\tohtml.vim
 25: H:\script\vim\plugin\vimballPlugin.vim
 26: H:\script\vim\plugin\zipPlugin.vim
 27: H:\script\vim\syntax\lua.vim
 28: H:\script\vim\ftplugin\lua.vim

Observe las líneas 11 y 12. Las rutas de sus archivos se verán un poco diferentes.


1
Esto podría ser útil para alguien. En mi situación, uso vim-plug, y algunos complementos (no sé cuál) cambiaron el formatoptions, sin embargo, mi .vim/afterfuente proviene de esos complementos ...
voldikss

Creo que el comando correcto es :scriptnames.
Jari Turkia

Por ensayo y error, he aprendido que tratar de forzar formatoptionsen ~/.vim/after/ftplugins.vimno funciona - entonces me encontré con este argumento , que clase-de explique por qué.
Stabledog el

3

Descubrí que puedo proporcionar una solución improvisada usando un comando automático.

La siguiente línea en su .vimrcarchivo debe aplicar las nuevas formaciones en todas partes:

autocmd FileType * set formatoptions-=o

Sin embargo, esto realmente no llega a resolver el problema; Todavía no entiendo por qué un simple setno era suficiente, y como se ha señalado en los comentarios, esta solución no es ideal.


1
Esto puede funcionar , pero es muy torpe y no es la solución que recomendaría.
James

@DJMcMayhem hmm, ¿qué posibles problemas podría encontrar al usar esta solución? Siéntase libre de publicar una respuesta que proporcione una mejor solución, obviamente la preferiría :)
theonlygusti

1
¿Por qué no @DJMcMayhem? El problema es casi seguro porque uno de los conjuntos de tipos de archivo formatoptions(por ejemplo, Perl, Ruby y muchos otros lo configuran). ¿Esto parece una solución aceptable?
Martin Tournoij

@Carpetsmoker, supongo que es justo. No había pensado en eso. Simplemente parece extraño cambiar una configuración en un autocmd, en lugar de solo configurarlo directamente.
James

2
@SatoKatsura Depende de lo que quieras, supongo. Es posible que algunas personas prefieran nunca agregar un carácter de comentario cuando lo usen, oindependientemente del tipo de archivo, en cuyo caso esto parece apropiado.
Martin Tournoij

2

Tuve una experiencia similar a la de OP.

Descubrí que tse estaba agregando a mi a formatoptionspesar de intentar deliberadamente deshabilitarlo.

Después de usar :verbose set fopara estar seguro de que provenía de .vimrc, noté que el comportamiento parecía depender de dónde puse las opciones de formateo en mi archivo .vimrc. Descubrí que estaba sucediendo debido a dónde había colocado set nocompatibleen mi archivo:

set formatoptions=qj
set nocompatible

:set fo?
  formatoptions=tcq

Resulta que esto se llama específicamente en :help nocompatible:

                   'compatible' 'cp' 'nocompatible' 'nocp'
'compatible' 'cp'   boolean (default on, off when a |vimrc| or |gvimrc|
                    file is found, reset in |defaults.vim|)
            global
            {not in Vi}
    This option has the effect of making Vim either more Vi-compatible, or
    make Vim behave in a more useful way.

    This is a special kind of option, because when it's set or reset,
    other options are also changed as a side effect.
    NOTE: Setting or resetting this option can have a lot of unexpected
    effects: Mappings are interpreted in another way, undo behaves
    differently, etc.  If you set this option in your vimrc file, you
    should probably put it at the very start.

Después de seguir este buen consejo, mis formatoptionsfueron preservados como se desea No sé si OP estaba teniendo este problema exacto o si se trataba de alguna otra interacción, pero me alegró descubrir qué lo estaba causando. Esperemos que esto ayude a alguien más a descubrir qué está cambiando (inicialmente inexplicablemente) su configuración.

También me gusta el autocmd de theonlygusti: hay algunas opciones que nunca quiero configurar sin importar el tipo de archivo. Te estoy mirando t.


2

Como muchos de nosotros, los usuarios de Vim, sufrimos esto, fui e investigué un poco más.

Mi solución es crear lo $HOME/.vim/after/ftplugin.vimsugerido por @ abcq2 solo para darme cuenta, no cambiará nada. Dada la lista dada por :scriptnames, ese archivo es fuente demasiado pronto. Sin embargo, la segunda sugerencia de crear un $HOME/.vim/after/ftplugin/lua.vimarchivo LUA ayuda.

Al straceaprender, aprendí que los plugins posteriores genéricos de tipo de archivo se obtienen antes que los plugins posteriores específicos de tipo de archivo y de tipo de archivo se obtienen después del tipo de archivo. No es muy intuitivo, pero así es como funciona.

Hay más información en mi blog sobre esto.


No estoy seguro de por qué crees que after/ftpluginsería útil. Por el contrario, la mejor manera es usar reemplazos específicos de tipo de archivo (usando un comando automático FileType o un after/<filetype>.vimarchivo específico ). Vea también la ayuda en:h ftplugin-overrule
Christian Brabandt

Estoy pensando que ayudaría, porque @ abcq2 lo sugirió en su respuesta anterior. Creo que estoy usando after/<filetype>.vimen mi respuesta.
Jari Turkia

0

Miré para ver qué archivos / rutas vimintentaron cargar, usando strace(como se describe aquí ), luego creé un ~/.vim/after/plugin/directorio (fue la última ubicación de configuración que vimintentó cargar), y luego vinculé mi enlace ~/.vimrca esa ubicación:

mkdir -p ~/.vim/after/plugin/
ln -s ~/.vimrc ~/.vim/after/plugin/ 

Lo que hice con strace:

Básicamente, corrí:

strace -o ~/vim_strace vim

... luego salga inmediatamente vim( :q!). A continuación, cargué ~/vim_strace( $ vim ~/vim_strace) y fui al final ( :$). Luego comencé a leer desde abajo buscando líneas que comenzaran con openat(AT_FDCWD, "/home/karl/......

Lo primero que veo es:

openat(AT_FDCWD, "/home/karl/.viminfo", O_RDONLY) = 3

Pero eso no es donde quiero mis opciones de configuración. La siguiente línea, justo encima de la .viminfolínea, era:

openat(AT_FDCWD, "/home/karl/.vim/after/plugin/", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (No such file or directory)

... "No existe tal archivo o directorio", ¿eh? Parece un ganador Entonces, ese es el que elegí.

Ahora funciona perfectamente.

Espero que esto ayude a alguien en alguna parte.


1
Lo siento, pero no veo cómo esta es una respuesta a esta pregunta. ¿Puede aclarar y explicar por qué esto resolverá el problema con formatoptions?
filbranden

Porque en realidad vimhonra las opciones en el .vimrcarchivo. Vuelva a leer y asegúrese de comprender tanto la pregunta como la respuesta.
Karl Wilbur

1) No se supone que su vimrc (completo) se ejecute en el contexto de un complemento. 2) Algo así como la adición de una sola línea ~/.vim/after/plugin/formatoptions.vimcon set fo-=oes más apetecible ... pero que todavía no funciona cuando un tipo de archivo plug-in de anulaciones de eso. Por ejemplo, abra Vim (sin archivo o un archivo no relacionado), luego use :epara abrir o crear un *.vimarchivo. Verás que las opciones de forma tienen ode nuevo, ya que se está configurando para ese búfer ftplugin/vim.vimy tu after/pluginarchivo no podrá anularlo.
filbranden

En cualquier caso ... Su respuesta no es totalmente clara sobre lo que está tratando de lograr aquí. Puedo ver (¿ahora?) Que estás intentando cargar vimrc por última vez en el proceso de inicio, después de todos los complementos. Su respuesta realmente no dice eso, ayudaría si comenzara explicando que ... Además, aunque strace es bueno y todo, responder "qué directorio es el último" es bastante fácil, solo mirando :set rtp?verá que ~/.vim/afteres último. Pero, como se mencionó anteriormente, esto realmente no funciona, ya foque los complementos ft lo restablecerán y ese es realmente el problema aquí.
filbranden

Lo hace absolutamente, y funciona absolutamente. Estaba teniendo exactamente el mismo problema que el OP después de actualizar a Ubuntu 20.04. Mi solución lo "solucionó", ya que cargó mi ~/.vimrc después de que se cargaron los otros complementos, lo que me permitió ~/.vimrcanular los valores predeterminados, según lo previsto.
Karl Wilbur
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.