Ustawienie typu pliku vim z modeline nie działa zgodnie z oczekiwaniami

12

Zgodnie z przyjętą odpowiedzią na to pytanie , próbuję użyć modelin w vimie, aby wymusić wykrywanie typu pliku w niektórych plikach.

Na przykład u góry pliku o nazwie gitconfig(uwaga nie ma wiodących .) mam następujący wiersz:

# vim: set filetype=gitconfig : 

modelinejest włączony w moim systemie. Jednak gdy otwieram plik w vimie, set filetype?zwraca confraczej niż oczekiwany gitconfig.

Czy to możliwe, że inne części mojej konfiguracji vima (np. Filetype.vim) powodują to dziwne zachowanie?

Edytowane w odpowiedzi na komentarze:

set compatible? zwroty nocompatible

set modeline? zwroty modeline

verbose set filetype? zwroty:

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

Nie rozumiem, dlaczego ogólnosystemowa wtyczka typu pliku zastępuje to, co ustawiłem w samym pliku.

Ostatnia uwaga: jest to wersja Vima 7.3 dostarczana z OSX.

Najnowsza wersja MacVim działająca w tym samym systemie, korzystająca z tego samego systemu, .vimrczachowuje się zgodnie z oczekiwaniami, z set ft?powrotem filetype=gitconfig.

Murali Suriar
źródło
Zazwyczaj widziałem te opcje ustawione na końcu (ostatniej linii) plików - może to jest problem ...
rozcietrzewiacz
Dla pewności: czy sprawdziłeś , set modeline?czy nie drukuje się nomodeline?
rozcietrzewiacz
Uważam, że najczęstszą przyczyną niedziałania modeliny compatiblejest jej ustawienie. Warto też to sprawdzić.
Edd Steel
Zobacz zaktualizowane pytanie, aby uzyskać odpowiedzi.
Murali Suriar

Odpowiedzi:

21

Po pewnym czasie okazuje się, że system vimrcdostarczany z OSX ustawia modelineszmienną (zwróć uwagę na końcowe) na 0. Ta zmienna kontroluje liczbę wierszy w pliku, które są sprawdzane pod kątem poleceń ustawiania. Ustawienie modeliny na niezerową wartość w moim .vimrcrozwiązało problem.

Pełny wynik dla ciekawskich: wynik vim --versionzachęcił mnie do sprawdzenia vimrc systemu:

% 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

Patrząc na vimrc systemu:

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

Doprowadził mnie do modelineszmiennej. Wygląda na to, że MacVim nie pobiera tego pliku systemowego (być może szukasz systemowego GVIMRC? :help startupNie jest jasne).

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
źródło
1

Aby to działało na moim systemie macOS, musiałem zdefiniować kilka ustawień w ~ / .vimrc:

modeline
modelines=2

Gdzie „ modeline ” umożliwia użycie ustawień w pliku, a „ modelines = # ” ustawia liczbę linii, które vim / vi będzie sprawdzać pod kątem ustawionych poleceń.

Po ustawieniu tych parametrów mogłem użyć składni takiej jak linia poniżej w moich plikach, aby zastąpić ustawione parametry.

# vim: ts=4 sw=4 ai
Ava
źródło