Pengaturan vim filetype dengan modeline tidak berfungsi seperti yang diharapkan

12

Sesuai jawaban yang diterima untuk pertanyaan ini , saya mencoba menggunakan modelines in vim untuk memaksa deteksi tipe file dalam beberapa file.

Misalnya, di bagian atas file bernama gitconfig(perhatikan tidak ada yang memimpin .), saya memiliki baris berikut:

# vim: set filetype=gitconfig : 

modelinediaktifkan di sistem saya. Namun, ketika saya membuka file dalam vim, set filetype?mengembalikan conf, daripada yang diharapkan gitconfig.

Apakah mungkin bahwa bagian lain dari konfigurasi vim saya (mis. Filetype.vim) menyebabkan perilaku aneh ini?

Diedit dalam menanggapi komentar:

set compatible? kembali nocompatible

set modeline? kembali modeline

verbose set filetype? pengembalian:

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

Saya tidak mengerti mengapa plugin filetype sistem lebar akan mengesampingkan apa yang telah saya atur dalam file itu sendiri.

Satu catatan terakhir: ini adalah versi Vim 7.3 yang dikirimkan bersama OSX.

Versi terbaru dari MacVim yang berjalan pada sistem yang sama menggunakan .vimrcperilaku yang sama seperti yang diharapkan, dengan set ft?pengembalian filetype=gitconfig.

Murali Suriar
sumber
Saya biasanya melihat opsi-opsi itu diatur di akhir (baris terakhir) file - mungkin itu masalahnya ...
rozcietrzewiacz
Hanya untuk memastikan: apakah Anda memeriksa yang set modeline?tidak mencetak nomodeline?
rozcietrzewiacz
Saya menemukan penyebab paling umum untuk modeline tidak berfungsi adalah yang compatibleditetapkan. Itu juga layak untuk diperiksa.
Edd Steel
Lihat pertanyaan terbaru untuk tanggapan.
Murali Suriar

Jawaban:

21

Jadi, setelah beberapa penggalian, diketahui bahwa sistem yang vimrcdikirimkan dengan OSX menetapkan modelinesvariabel (perhatikan trailing 's') menjadi 0. Variabel ini mengontrol jumlah baris dalam file yang diperiksa untuk perintah yang ditetapkan. Pengaturan modelines ke nilai non-nol di saya .vimrcmemecahkan masalah.

Output penuh, untuk yang penasaran: output dari vim --versionmeminta saya untuk memeriksa sistem 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

Melihat vimrc sistem:

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

Membawa saya ke modelinesvariabel. Tampaknya MacVim tidak sumber file sistem ini (mungkin mencari sistem GVIMRC saja? :help startupTidak jelas).

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

Agar ini dapat bekerja pada sistem macOS saya, saya harus mendefinisikan beberapa pengaturan di ~ / .vimrc:

modeline
modelines=2

Di mana ' modeline ' memungkinkan penggunaan pengaturan dalam file, dan ' modelines = # ' menetapkan jumlah baris yang vim / vi akan memeriksa untuk mengatur perintah.

Setelah parameter tersebut ditetapkan, saya dapat menggunakan sintaksis seperti baris di bawah ini di file saya untuk mengganti parameter yang ditetapkan.

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