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

为什么vim会以不同方式突出显示此文件? 注,vim,Vim,我使用的是本地vim插件,它允许我使用特定于项目的.vimrc文件,一般来说,它工作正常,正如您所期望的那样 背景 我使用Silverstripe,因此必须使用Silverstripe模板,这些模板是*.ss文件,但是默认情况下vim将*.ss分配给scheme文件。现在我只在一个项目中使用Silverstripe,并且一直在使用项目特定的.vimrc中设置的html文件类型来突出显示,但是在遇到一些错误之后,我想我应该在一个htmlss.vim文件中添加*.ss文件的突出显示(使用html.v

我使用的是本地vim插件,它允许我使用特定于项目的.vimrc文件,一般来说,它工作正常,正如您所期望的那样

背景 我使用Silverstripe,因此必须使用Silverstripe模板,这些模板是*.ss文件,但是默认情况下vim将*.ss分配给scheme文件。现在我只在一个项目中使用Silverstripe,并且一直在使用项目特定的.vimrc中设置的html文件类型来突出显示,但是在遇到一些错误之后,我想我应该在一个htmlss.vim文件中添加*.ss文件的突出显示(使用html.vim作为基础,我只是在接近结尾的地方添加了模板规则)。经过一点尝试和错误,我让它正常工作和突出显示,但我遇到了一个奇怪的错误

问题: 使用此project.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
。i、 e

augroup filetypedetect
    autocmd BufEnter,BufRead,BufNewFile *.ss setf htmlss
augroup END
工作但是

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

不要


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

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


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

是否使用autocmd命令设置颜色方案或任何突出显示选项?请尝试删除该文件!从第二个autocmd开始标记!声明,看看会发生什么…@Filip这不应该有什么区别。我建议首先完全删除
:autocmd相反(因为我不明白为什么需要它,而不是因为它应该干扰),首先使用第一个工作变量执行
debug edit/path/to/file.ss
并尝试跟踪问题。或者,使用第二个工作变量执行
set verbosefile=verbose.log verbose=15 | edit/path/to/file.ss | set verbose=0
(在
verbosefile=
之后使用不同的名称)然后对这两个进行
vimdiff
。我的问题不是它不起作用,我感兴趣的是为什么一个有效而另一个无效。这不是“我有问题”的问题,更多的是“我对这种行为感到好奇”问题。我自己没有时间追查原因。
augroup filetypedetect
    autocmd! * *.ss
    autocmd BufEnter,BufRead,BufNewFile *.ss setf htmlss
augroup END
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