La définition du type de fichier vim avec modeline ne fonctionne pas comme prévu

12

Conformément à la réponse acceptée à cette question , j'essaie d'utiliser des modèles dans vim pour forcer la détection de type de fichier dans certains fichiers.

Par exemple, en haut d'un fichier nommé gitconfig(notez qu'il n'y a pas de début .), j'ai la ligne suivante:

# vim: set filetype=gitconfig : 

modelineest activé sur mon système. Cependant, lorsque j'ouvre le fichier dans vim, set filetype?renvoie conf, plutôt que prévu gitconfig.

Est-il possible que d'autres parties de ma configuration vim (par exemple filetype.vim) provoquent ce comportement étrange?

Modifié en réponse aux commentaires:

set compatible? Retour nocompatible

set modeline? Retour modeline

verbose set filetype? Retour:

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

Je ne comprends pas pourquoi le plugin de type de fichier à l'échelle du système remplacerait ce que j'ai défini dans le fichier lui-même.

Une dernière remarque: il s'agit de la version de Vim 7.3 livrée avec OSX.

La dernière version de MacVim fonctionnant sur le même système utilisant le même .vimrccomportement que prévu, avec set ft?retour filetype=gitconfig.

Murali Suriar
la source
J'ai généralement vu ces options définies à la fin (dernière ligne) des fichiers - c'est peut-être le problème ...
rozcietrzewiacz
Juste pour être sûr: avez-vous vérifié que set modeline?cela ne s'imprime pas nomodeline?
rozcietrzewiacz
Je trouve que la cause la plus courante pour laquelle la modeline ne fonctionne pas est qu'elle compatibleest définie. Cela vaut également la peine d'être vérifié.
Edd Steel
Voir la question mise à jour pour les réponses.
Murali Suriar

Réponses:

21

Ainsi, après quelques recherches, il s'avère que le système vimrclivré avec OSX définit la modelinesvariable (notez les derniers) à 0. Cette variable contrôle le nombre de lignes dans un fichier dont les commandes set sont vérifiées. La définition des modelines à une valeur non nulle dans mon a .vimrcrésolu le problème.

Sortie complète, pour les curieux: la sortie de vim --versionm'a incité à vérifier le système 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

En regardant le système vimrc:

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

M'a conduit à la modelinesvariable. Il semble que MacVim ne source pas ce fichier système (peut-être à la recherche d'un système GVIMRC à la place? N'est :help startuppas clair).

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
la source
1

Pour que cela fonctionne sur mon système macOS, j'ai dû définir quelques paramètres dans ~ / .vimrc:

modeline
modelines=2

Où ' modeline ' permet d'utiliser des paramètres dans le fichier et ' modelines = # ' définit le nombre de lignes que vim / vi vérifiera pour les commandes set.

Une fois ces paramètres définis, j'ai pu utiliser la syntaxe comme la ligne ci-dessous dans mes fichiers pour remplacer les paramètres définis.

# vim: ts=4 sw=4 ai
Ava
la source