如何在Vim中为同类型文件配置多模板?解决CPP模板重复加载问题
解决Vim根据文件名加载不同CPP模板的冲突问题
问题出在你当前的自动命令匹配规则上:*.cpp会匹配所有以.cpp结尾的文件,包括文件名末尾带=的xxx=.cpp,所以创建这类文件时,两个BufNewFile事件都会触发,导致两个模板被同时加载。
可以通过以下两种方式解决:
方式一:给第一个规则添加条件判断
修改第一个自动命令,只有当文件名不是以=.cpp结尾时才加载默认模板:
au BufNewFile *.cpp if expand("%") !~# "=.cpp$" | 0r ~/.vim/templates/skeleton.cpp | endif au BufNewFile *=.cpp 0r ~/.vim/templates/another.cpp
这里expand("%")获取当前文件名,!~# "=.cpp$"表示不匹配以=.cpp结尾的文件名,以此跳过第一个模板的加载。
方式二:修改第一个规则的匹配模式
把第一个规则的匹配模式改成只匹配**文件名末尾(.cpp前)不带=**的CPP文件:
au BufNewFile *[^=].cpp 0r ~/.vim/templates/skeleton.cpp au BufNewFile *=.cpp 0r ~/.vim/templates/another.cpp
*[^=].cpp是Vim的通配符匹配规则,[^=]表示匹配任意非=的字符,这样xxx=.cpp不会触发第一个规则,只会触发第二个。
两种方式都能实现你的需求,选一种修改vimrc后重启Vim即可生效。
内容的提问来源于stack exchange,提问作者RoyKin00
相关产品推荐
相关产品推荐

