我知道如何配置vim以根据扩展名选择特定的文件类型:
au BufNewFile,BufRead *.foo set filetype=foo
但是,我常见的情况是最后打开一个带有附加后缀的文件。一个特定方案是在合并期间解决版本控制冲突。我有像#34; foo.cpp.orig"等文件。或者" foo.java.merge"等我想配置vim,以便它打开一个以" .orig"等结尾的文件,以便它去掉该后缀并使用剩余的文件扩展名来选择文件类型。
是的,我确实知道我可以做点什么
au BufNewFile,BufRead *.java.* set filetype=java
但这不太理想,因为我必须为我可能正在编辑的所有可能的文件类型手动添加一个条目。
答案 0 :(得分:2)
" Ignored extensions
if exists("*fnameescape")
au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.dpkg-dist,?\+.dpkg-old,?\+.dpkg-new,?\+.dpkg-bak,?\+.rpmsave,?\+.rpmnew
\ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r"))
au BufNewFile,BufRead *~
\ let s:name = expand("<afile>") |
\ let s:short = substitute(s:name, '\~$', '', '') |
\ if s:name != s:short && s:short != "" |
\ exe "doau filetypedetect BufRead " . fnameescape(s:short) |
\ endif |
\ unlet! s:name s:short
au BufNewFile,BufRead ?\+.in
\ if expand("<afile>:t") != "configure.in" |
\ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r")) |
\ endif
elseif &verbose > 0
echomsg "Warning: some filetypes will not be recognized because this version of Vim does not have fnameescape()"
endif
实际上,Vim已经考虑过了。上面的代码来自filetype.vim
答案 1 :(得分:1)
在查看Dyno指出的代码之后,我认为我想要的是添加
au BufNewFile,BufRead ?\+.merge
\ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r"))
到我的.vimrc。设置一些变量来扩展已知模式列表并不像修改原始filetype.vim那样糟糕。