L'impostazione del tipo di file vim con modeline non funziona come previsto


12

Secondo la risposta accettata a questa domanda , sto tentando di usare modeline in vim per forzare il rilevamento del tipo di file in alcuni file.

Ad esempio, nella parte superiore di un file denominato gitconfig(nota che non vi è alcun inizio .), ho la seguente riga:

# vim: set filetype=gitconfig : 

modelineè abilitato sul mio sistema. Tuttavia, quando apro il file in vim, set filetype?ritorna conf, piuttosto che il previsto gitconfig.

È possibile che altre parti della mia configurazione di vim (es. Filetype.vim) stiano causando questo strano comportamento?

Modificato in risposta ai commenti:

set compatible? ritorna nocompatible

set modeline? ritorna modeline

verbose set filetype? ritorna:

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

Non capisco perché il plugin filetype a livello di sistema sovrascriverebbe quello che ho impostato nel file stesso.

Un'ultima nota: questa è la versione di Vim 7.3 fornita con OSX.

L'ultima versione di MacVim in esecuzione sullo stesso sistema utilizzando lo stesso .vimrccomportamento del previsto, con set ft?ritorno filetype=gitconfig.


Di solito vedevo quelle opzioni impostate alla fine (ultima riga) dei file - forse questo è il problema ...
rozcietrzewiacz

Solo per essere sicuri: hai controllato che set modeline?non stampa nomodeline?
rozcietrzewiacz,

Trovo che la causa più comune del mancato funzionamento della modelina sia quella compatibleimpostata. Vale la pena di controllare anche questo.
Edd Steel,

Vedi la domanda aggiornata per le risposte.
Murali Suriar,

Risposte:


21

Quindi, dopo alcuni scavi, risulta che il sistema vimrcfornito con OSX imposta la modelinesvariabile (nota la 's finale) su 0. Questa variabile controlla il numero di righe in un file che sono controllate per i comandi impostati. L'impostazione di modeline su un valore diverso da zero ha .vimrcrisolto il problema.

Uscita completa, per i curiosi: l'output di vim --versionmi ha spinto a controllare il 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

Guardando il sistema vimrc:

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

Mi ha portato alla modelinesvariabile. Sembra che MacVim non generi questo file di sistema (forse stai cercando un sistema GVIMRC invece? :help startupNon è chiaro).

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

Per farlo funzionare sul mio sistema macOS ho dovuto definire un paio di impostazioni in ~ / .vimrc:

modeline
modelines=2

Dove ' modeline ' abilita l'uso delle impostazioni in-file e ' modelines = # ' imposta il numero di righe che vim / vi controllerà per i comandi impostati.

Una volta impostati quei parametri, sono stato in grado di utilizzare la sintassi come la riga seguente nei miei file per sovrascrivere i parametri impostati.

# vim: ts=4 sw=4 ai
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.