Установка типа файла vim с моделиной не работает должным образом

12

Согласно принятому ответу на этот вопрос , я пытаюсь использовать modelines в vim для принудительного определения типа файла в некоторых файлах.

Например, в верхней части файла с именем gitconfig(обратите внимание, нет начального .), у меня есть следующая строка:

# vim: set filetype=gitconfig : 

modelineвключен в моей системе. Однако когда я открываю файл в vim, set filetype?возвращается conf, а не ожидаемый gitconfig.

Возможно ли, что другие части моей конфигурации vim (например, filetype.vim) вызывают это странное поведение?

Отредактировано в ответ на комментарии:

set compatible? возвращается nocompatible

set modeline? возвращается modeline

verbose set filetype? возвращает:

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

Я не понимаю, почему общесистемный плагин filetype переопределяет то, что я установил в самом файле.

Последнее замечание: это версия Vim 7.3, поставляемая с OSX.

Последняя версия MacVim, работающая в той же системе с использованием того же .vimrcповедения, что и ожидалось, с set ft?возвратом filetype=gitconfig.

Мурали Суриар
источник
Я обычно видел эти параметры, установленные в конце (последней строке) файлов - может быть, в этом проблема ...
rozcietrzewiacz
Просто чтобы убедиться: ты проверял, что set modeline?не печатает nomodeline?
rozcietrzewiacz
Я считаю, что самая распространенная причина неработающей моделин - это то, что compatibleустановлено. Это тоже стоит проверить.
Эдд Стил
Смотрите обновленный вопрос для ответов.
Мурали Суриар

Ответы:

21

Таким образом, после некоторого копания выясняется, что система, vimrcпоставляемая с OSX, устанавливает modelinesдля переменной (обратите внимание на конечные 's') значение 0. Эта переменная контролирует количество строк в файле, которые проверяются на наличие команд set. Установка Modelines к ненулевому значению в моей .vimrcрешил проблему.

Полный вывод, для любопытных: вывод vim --versionпобудил меня проверить систему 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

Глядя на систему vimrc:

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

Привел меня к modelinesпеременной. Похоже, что MacVim не получает этот системный файл (возможно, ищет системный GVIMRC вместо этого :help startup- не ясно).

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

Чтобы это работало в моей системе MacOS, мне нужно было определить пару параметров в ~ / .vimrc:

modeline
modelines=2

Где ' modeline ' разрешает использование настроек в файле, а ' modelines = # ' устанавливает количество строк, которые vim / vi будет проверять на команды set.

После того, как эти параметры были установлены, я смог использовать синтаксис, как показано ниже в моих файлах, для переопределения установленных параметров.

# vim: ts=4 sw=4 ai
Ava
источник