Establecer el tipo de archivo vim con modeline no funciona como se esperaba


12

Según la respuesta aceptada a esta pregunta , estoy tratando de usar modelines en vim para forzar la detección del tipo de archivo en algunos archivos.

Por ejemplo, en la parte superior de un archivo llamado gitconfig(tenga en cuenta que no hay un encabezado .), tengo la siguiente línea:

# vim: set filetype=gitconfig : 

modelineestá habilitado en mi sistema. Sin embargo, cuando abro el archivo en vim, set filetype?devuelve conf, en lugar de lo esperado gitconfig.

¿Es posible que otras partes de mi configuración de vim (por ejemplo, filetype.vim) estén causando este comportamiento extraño?

Editado en respuesta a los comentarios:

set compatible? devoluciones nocompatible

set modeline? devoluciones modeline

verbose set filetype? devoluciones:

filetype=conf
      Last set from /usr/share/vim/vim73/filetype.vim

No entiendo por qué el complemento de tipo de archivo de todo el sistema anularía lo que he configurado en el archivo en sí.

Una nota final: esta es la versión de Vim 7.3 incluida con OSX.

La última versión de MacVim que se ejecuta en el mismo sistema con los mismos .vimrccomportamientos esperados, con el set ft?regreso filetype=gitconfig.


Por lo general vi esas opciones establecidas en el final (última línea) de archivos - tal vez esa es la cuestión ...
rozcietrzewiacz

Solo para asegurarme: ¿ comprobaste que set modeline?no se imprime nomodeline?
rozcietrzewiacz

Creo que la causa más común para que modeline no funcione es que compatibleestá configurada. Eso valdría la pena comprobarlo también.
Edd Steel

Ver pregunta actualizada para respuestas.
Murali Suriar

Respuestas:


21

Entonces, después de un poco de excavación, se da cuenta de que el sistema vimrcincluido con OSX establece la modelinesvariable (tenga en cuenta la 's' final) en 0. Esta variable controla el número de líneas en un archivo que se comprueban para los comandos de configuración. Establecer modelines en un valor distinto de cero en mi .vimrcresolvió el problema.

Salida completa, para los curiosos: la salida de vim --versionme incitó a verificar el sistema vimrc:

% vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Jun 24 2011 20:00:09)
Compiled by root@apple.com
Normal version without GUI.  Features included (+) or not (-):
...
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
      user exrc file: "$HOME/.exrc"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -D_FORTIFY_SOURCE=0 -Iproto -DHAVE_CONFIG_H -arch i386 -arch x86_64 -g -Os -pipe
Linking: gcc -arch i386 -arch x86_64 -o vim -lncurses

Mirando el sistema vimrc:

% cat /usr/share/vim/vimrc 
" Configuration file for vim
set modelines=0         " CVE-2007-2438
...

Me llevó a la modelinesvariable. Parece que MacVim no obtiene este archivo del sistema (¿quizás :help startupno está claro si busca un sistema GVIMRC? ).

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Jul 27 2011 19:46:24)
MacOS X (unix) version
Included patches: 1-260
Compiled by XXXXX
Huge version with MacVim GUI.  Features included (+) or not (-):
...
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
      user exrc file: "$HOME/.exrc"
  system gvimrc file: "$VIM/gvimrc"
    user gvimrc file: "$HOME/.gvimrc"
    system menu file: "$VIMRUNTIME/menu.vim"
  fall-back for $VIM: "/Applications/MacVim.app/Contents/Resources/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_MACVIM -Wall -Wno-unknown-pragmas -p
ipe  -DMACOS_X_UNIX -no-cpp-precomp  -g -O2 -D_FORTIFY_SOURCE=1
Linking: gcc   -L.         -Wl,-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -L/usr/local/lib -o V
im -framework Cocoa -framework Carbon      -lncurses  -liconv -framework Cocoa    -fstack-prote
ctor -L/usr/local/lib  -L/System/Library/Perl/5.10/darwin-thread-multi-2level/CORE -lperl -lm -
lutil -lc -framework Python   -framework Ruby

1

Para que esto funcione en mi sistema macOS, tuve que definir un par de configuraciones en ~ / .vimrc:

modeline
modelines=2

Donde ' modeline ' habilita el uso de la configuración en el archivo, y ' modelines = # ' establece el número de líneas que vim / vi verificará para los comandos set.

Una vez que se establecieron esos parámetros, pude usar la sintaxis como la línea a continuación en mis archivos para anular los parámetros establecidos.

# vim: ts=4 sw=4 ai
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.