使用Modeline设置Vim文件类型无法正常工作


12

根据对此问题的公认答案,我正在尝试在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

我不明白为什么系统范围的文件类型插件会覆盖我在文件本身中设置的内容。

最后一点:这是OSX随附的Vim 7.3版本。

在同一系统上使用相同版本运行的MacVim的最新版本的.vimrc行为符合预期,set ft?返回filetype=gitconfig


我通常会看到在文件末尾(最后一行)设置了这些选项-也许就是问题所在……
rozcietrzewiacz 2011年

只是为了确保:您是否检查set modeline?不打印nomodeline
rozcietrzewiacz 2011年

我发现Modeline无法正常运作的最常见原因是compatible已设定。那也值得检查。
Edd Steel

请参阅更新的问题以获取答案。
Murali Suriar

Answers:


21

因此,经过一番挖掘后,发现vimrcOSX附带的系统将modelines(请注意结尾的“ s”)变量设置为0。此变量控制文件中要检查设置命令的行数。在我.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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.