为什么vim以不同方式突出显示此文件?

时间:2012-01-31 22:20:07

标签: vim

注意

我正在使用本地vim插件,它允许我使用特定于项目的.vimrc文件,一般情况下它可以正常工作并且正如您所期望的那样。

背景

我使用Silverstripe,因此必须使用Silverstripe模板,这些模板是* .ss文件,但默认情况下,vim会将* .ss分配给方案文件。现在我只使用Silverstripe用于一个项目,并且已经在我的项目特定的.vimrc中使用html文件类型集进行突出显示,但是在遇到一些错误后,我想我会在htmlss中添加* .ss文件的突出显示.vim文件(使用html.vim作为基础,我只是在最后添加了模板规则)。经过一些试验和错误,我得到了它正常工作并突出显示,但是我遇到了一个奇怪的错误......

问题

使用这个项目.vimrc:

augroup filetypedetect
    autocmd! * *.ss
    autocmd! BufEnter *.ss setf htmlss
augroup END

然而,一切正常,使用此.vimrc:

augroup filetypedetect
    autocmd! * *.ss
    autocmd! BufEnter,BufRead,BufNewFile *.ss setf htmlss
augroup END

语法突出显示失败,它正确设置文件类型,但突出显示变得棘手。

我想我想知道为什么版本1有效,但版本2没有,尽管没有其他变化。

附录

经过多一点调查后,我发现只有当我从autocmd! * *.ss移除!时,删除autocmd! BufEnter,BufRead,BufNewFile *.ss setf htmlss才能使第二个工作正常。即。

augroup filetypedetect
    autocmd BufEnter,BufRead,BufNewFile *.ss setf htmlss
augroup END

有效但

augroup filetypedetect
    autocmd! BufEnter,BufRead,BufNewFile *.ss setf htmlss
augroup END

augroup filetypedetect
    autocmd! * *.ss
    autocmd BufEnter,BufRead,BufNewFile *.ss setf htmlss
augroup END

不要。

同样,我的问题是为什么会出现这些差异,我现在有一个有效的实施,所以我对任何调查都不感兴趣。我不想要解决方案,因为我没有问题。

1 个答案:

答案 0 :(得分:2)

这可能是由于您的语法文件多次应用时与自身冲突造成的。语法文件中的第一行可能是syntax enable,它可以在不更改任何当前突出显示设置的情况下启用语法。每the docs

The ":syntax enable" command will keep your current color settings.  This
allows using ":highlight" commands to set your preferred colors before or
after using this command.  If you want Vim to overrule your settings with the
defaults, use:
        :syntax on

因此,一个适当的“解决方案”应该是在语法文件中将syntax enable更改为syntax on