モードラインを使用したvimファイルタイプの設定が期待どおりに機能しない


12

この質問に対する受け入れられた答えに従って、私はvimでモードラインを使用していくつかのファイルでファイルタイプの検出を強制しようとしています。

たとえば、という名前のファイルの先頭にgitconfig(先頭にがないことに注意してください.)、次の行があります。

# vim: set filetype=gitconfig : 

modelineシステムで有効になっています。ただし、vimでファイルを開くと、予想されるでなくがset filetype?返さconfgitconfigます。

私のvim構成の他の部分(filetype.vimなど)がこの奇妙な動作を引き起こしている可能性はありますか?

コメントに応じて編集:

set compatible? 戻り値 nocompatible

set modeline? 戻り値 modeline

verbose set filetype? 戻り値:

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

システム全体のファイルタイププラグインが、ファイル自体に設定した内容をオーバーライドする理由がわかりません。

最後の注意点:これはOSXに同梱されているVim 7.3のバージョンです。

同じシステムで同じバージョンを使用して実行されているMacVimの最新バージョンは.vimrc、をset ft?返して期待どおりに動作しfiletype=gitconfigます。


私は通常に設定これらのオプションを見終わり ...多分それは問題である-ファイルの(最後の行を)
rozcietrzewiacz

念のため:印刷しないことを確認しましたか?set modeline?nomodeline
rozcietrzewiacz

モードラインが機能しない最も一般的な原因は、compatible設定されていることです。これも確認する価値があります。
Edd Steel

回答については、更新された質問をご覧ください。
ムラリスリアー

回答:


21

そのため、少し掘り下げた後vimrc、OSXに付属のシステムがmodelines(末尾の 's'に注意)変数を0に設定することがわかります。この変数は、setコマンドをチェックするファイル内の行数を制御します。私のモードラインをゼロ以外の値に設定すると.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はこのシステムファイルを取得して:help startupいないようです(代わりにシステムGVIMRCを探しているのでしょうか?)。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.