我经常在Ruby on Rails上开发。最近在RoR 3中包含了Tilt,我们有.scss.erb
等文件扩展名。如何在这种情况下自动生成filetype = scss.erb
,对于每个具有多个扩展名的文件都是如此?
修改:在这种情况下应为scss.eruby
,因为erb
扩展名默认为eruby
文件类型。
编辑:如果不清楚,我正在寻找一种方法,使所有具有多个扩展名的文件动态地工作。例如,文件foo.js.html
的文件类型应为js.html
。
再次编辑:Prince Goulash的答案不采用特定扩展名的默认文件类型。
答案 0 :(得分:16)
在你的vimrc中:
autocmd BufRead,BufNewFile *.scss.erb setlocal filetype=scss.eruby
(见:help ftdetect
,第2节)。
修改强>
要为多个扩展设置dyanamically文件类型,这似乎对我有用:
autocmd BufRead,BufNewFile *.*.*
\ sil exe "setlocal filetype=" . substitute(expand("%"),"^[^.]*\.","",1)
substitute
命令通过简单地从第一个.
之前的文件名中删除所有文本来构建filtype。可能有更复杂的方式......
再次编辑
这是另一次尝试。 MultiExtensionFiletype()
是一个函数,它使用扩展名最后一部分的默认文件类型,并在扩展名的第一部分(即夹在点之间的部分)作为前缀。
function MultiExtensionFiletype()
let ft_default=&filetype
let ft_prefix=substitute(matchstr(expand('%'),'\..\+\.'),'\.','','g')
sil exe "set filetype=" . ft_prefix . "." . ft_default
endfunction
必须在BufReadPost
事件上调用该函数,以便通过忽略多个扩展来设置初始文件类型。
autocmd BufReadPost *.*.* call MultiExtensionFiletype()
希望这个答案正在收集有用的东西!