根据对这个问题的公认答案,我试图在 vim 中使用模式行来强制在某些文件中进行文件类型检测。
例如,在名为gitconfig(注意没有前导.)的文件的顶部,我有以下行:
# vim: set filetype=gitconfig :
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我不明白为什么系统范围的文件类型插件会覆盖我在文件本身中设置的内容。
最后一点:这是 OSX 附带的 Vim 7.3 版本。
在同一系统上运行的最新版本的MacVim使用与.vimrc预期相同的行为,set ft?返回filetype=gitconfig.
Mur*_*iar 23
因此,经过一番挖掘,发现vimrcOSX 附带的系统将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
Run Code Online (Sandbox Code Playgroud)
查看系统vimrc:
% cat /usr/share/vim/vimrc
" Configuration file for vim
set modelines=0 " CVE-2007-2438
...
Run Code Online (Sandbox Code Playgroud)
带我到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
Run Code Online (Sandbox Code Playgroud)