![使用 modeline 设置 vim 文件类型未按预期工作](https://linux22.com/image/17607/%E4%BD%BF%E7%94%A8%20modeline%20%E8%AE%BE%E7%BD%AE%20vim%20%E6%96%87%E4%BB%B6%E7%B1%BB%E5%9E%8B%E6%9C%AA%E6%8C%89%E9%A2%84%E6%9C%9F%E5%B7%A5%E4%BD%9C.png)
根据对此接受的答案问题,我尝试使用 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 版本。
最新版本麦克维姆使用相同的行为在同一系统上运行.vimrc
与预期一致,并set ft?
返回filetype=gitconfig
.
答案1
因此,经过一番挖掘,发现vimrc
OSX 附带的系统将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 [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
查看系统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
答案2
为了让它在我的 macOS 系统上工作,我必须在 ~/.vimrc 中定义一些设置:
modeline
modelines=2
在哪里 '模型行' 允许使用文件内设置,并且 '模型行=#' 设置 vim/vi 将检查 set 命令的行数。
设置这些参数后,我就可以在文件中使用如下行的语法来覆盖设置的参数。
# vim: ts=4 sw=4 ai