Definir o tipo de arquivo vim com a modeline não funcionando conforme o esperado

12

De acordo com a resposta aceita a esta pergunta , estou tentando usar modelines no vim para forçar a detecção de tipos de arquivos em alguns arquivos.

Por exemplo, na parte superior de um arquivo denominado gitconfig(observe que não há um avanço .), tenho a seguinte linha:

# vim: set filetype=gitconfig : 

modelineestá ativado no meu sistema. No entanto, quando abro o arquivo no vim, set filetype?retorna conf, em vez do esperado gitconfig.

É possível que outras partes da minha configuração do vim (por exemplo, filetype.vim) estejam causando esse comportamento estranho?

Editado em resposta a comentários:

set compatible? retorna nocompatible

set modeline? retorna modeline

verbose set filetype? retorna:

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

Não entendo por que o plug-in de tipo de arquivo amplo do sistema estaria substituindo o que defini no próprio arquivo.

Uma observação final: esta é a versão do Vim 7.3 fornecida com o OSX.

A última versão do MacVim sendo executada no mesmo sistema, usando o mesmo .vimrccomportamento esperado, com set ft?retorno filetype=gitconfig.

Murali Suriar
fonte
Normalmente, eu vi essas opções definidas no final (última linha) de arquivos - talvez essa é a questão ...
rozcietrzewiacz
Só para ter certeza: você verificar que set modeline?não imprime nomodeline?
rozcietrzewiacz 01/09/11
Acho que a causa mais comum para a modelina não funcionar é essa compatible. Vale a pena conferir também.
Edd Steel
Consulte a pergunta atualizada para obter respostas.
Murali Suriar

Respostas:

21

Portanto, após algumas pesquisas, verifica-se que o sistema vimrcfornecido com o OSX define a modelinesvariável (observe os à direita) como 0. Essa variável controla o número de linhas em um arquivo que são verificadas quanto a comandos de configuração. Definir modelines para um valor diferente de zero na minha .vimrcresolveu o problema.

Saída total, para os curiosos: a saída de vim --versionme pediu para verificar o 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

Olhando para o sistema vimrc:

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

Me levou à modelinesvariável. Parece que o MacVim não origina esse arquivo do sistema (talvez procurando um GVIMRC do sistema em vez disso? :help startupNão está claro).

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

Para que isso funcione no meu sistema macOS, tive que definir algumas configurações em ~ / .vimrc:

modeline
modelines=2

Onde ' modeline ' permite o uso de configurações no arquivo, e ' modelines = # ' define o número de linhas que o vim / vi verificará nos comandos set.

Depois que esses parâmetros foram definidos, eu pude usar a sintaxe como a linha abaixo nos meus arquivos para substituir os parâmetros definidos.

# vim: ts=4 sw=4 ai
Ava
fonte