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.


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 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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.