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.

Murali Suriar
fuente
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 [email protected]
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
Murali Suriar
fuente
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
Ava
fuente