Vim 如果文件具有多个扩展名,则在“filetype”中自动设置多个文件类型

Vim 如果文件具有多个扩展名,则在“filetype”中自动设置多个文件类型,vim,Vim,我经常在RubyonRails上开发。随着最近在RoR 3中加入了Tilt,我们有了类似.scss.erb的文件扩展名。在这种情况下,如何使filetype=scss.erb自动生成,并使具有多个扩展名的每个文件都具有相同的扩展名 编辑:在这种情况下,它应该是scss.eruby,因为erb扩展默认为eruby文件类型 编辑:如果不清楚的话,我正在寻找一种方法,使它能够对所有具有多个扩展名的文件动态工作。例如,文件foo.js.html的文件类型应为js.html 再次编辑:Prince Gou

我经常在RubyonRails上开发。随着最近在RoR 3中加入了Tilt,我们有了类似
.scss.erb
的文件扩展名。在这种情况下,如何使
filetype=scss.erb
自动生成,并使具有多个扩展名的每个文件都具有相同的扩展名

编辑:在这种情况下,它应该是
scss.eruby
,因为
erb
扩展默认为
eruby
文件类型

编辑:如果不清楚的话,我正在寻找一种方法,使它能够对所有具有多个扩展名的文件动态工作。例如,文件
foo.js.html
的文件类型应为
js.html

再次编辑:Prince Goulash的回答不采用特定扩展名的默认文件类型。

在vimrc中:

autocmd BufRead,BufNewFile *.scss.erb setlocal filetype=scss.eruby
(请参见《代码》:帮助ftdetect,第2节)

编辑

要动态地为多个扩展设置文件类型,这似乎对我很有用:

autocmd BufRead,BufNewFile *.*.*
    \ sil exe "setlocal filetype=" . substitute(expand("%"),"^[^.]*\.","",1)
substitute
命令通过简单地从第一个
之前的文件名中删除所有文本来构造FiltType。也许有一种更复杂的方法

再次编辑

这是另一个尝试
MultiExtensionFiletype()
是一个函数,它使用扩展最后一部分的默认文件类型,并以扩展的第一部分(即夹在点之间的部分)作为前缀

必须在
BufReadPost
事件上调用该函数,以便通过忽略多个扩展名来设置初始文件类型

autocmd BufReadPost *.*.* call MultiExtensionFiletype()

希望这个答案能集中在一些有用的东西上

如果问题不清楚,对不起。我已经更新了这个问题。我想知道我是否过于简单化了!我的编辑是否符合您的要求?这有一个小(或大)问题
erb
文件默认为
eruby
ft,使用您的代码,它将erb设置为erb,而不是eruby。我添加了另一种方法,可能更接近您想要的方法。是否可以简单地修复,使其扩展两个扩展名?这样也很好。谢谢!请确定,是否始终使用文件扩展名最后一部分的默认类型(在本例中,从
.erb
扩展名获取
eruby
),但以第一部分(
scss
)为前缀?。。。如果是这样的话,看看我最近的编辑。
autocmd BufReadPost *.*.* call MultiExtensionFiletype()