如何在Vim中通过命令为新建文件选择不同的模板
实现Vim C模板按需选择的配置方案
第一步:移除原有自动加载模板的配置
你原有配置会在所有新建.c文件时自动加载默认模板,先删除或注释掉这段配置里的对应规则:
原有配置中的
autocmd BufNewFile *.c 0r ~/.vim/templates/skeleton.c行直接删除或注释即可,保留augroup框架不会影响后续配置。
方案一:为常用模板定义独立命令
适合模板数量少、使用频率高的场景,直接在vimrc中添加如下配置,为每个模板绑定自定义命令:
" 按需定义不同C模板的调用命令,命令名可以根据自己习惯修改 command! CNormal 0r ~/.vim/templates/skeleton.c command! CKernel 0r ~/.vim/templates/skeleton_kernel.c command! CUtils 0r ~/.vim/templates/skeleton_utils.c
使用方式:新建.c文件后,在普通模式输入对应命令回车即可加载模板,比如输入:CKernel就会导入内核开发用的C模板。
方案二:交互式菜单选择模板
适合模板数量较多的场景,无需记忆多个命令,通过选择列表调用模板,在vimrc中添加如下配置:
function! LoadCFileTemplate() " 按自己的实际模板数量和名称修改列表内容 let template_list = [ \ "请选择要使用的C模板:", \ "1. 默认通用模板", \ "2. 内核模块开发模板", \ "3. 命令行工具模板", \ "4. GUI应用开发模板", \ "5. 不使用模板" \ ] let sel = inputlist(template_list) if sel == 1 0r ~/.vim/templates/skeleton.c elseif sel == 2 0r ~/.vim/templates/skeleton_kernel.c elseif sel == 3 0r ~/.vim/templates/skeleton_utils.c elseif sel == 4 0r ~/.vim/templates/skeleton_gui.c endif endfunction " 定义调用选择菜单的命令 command! LoadCTpl call LoadCFileTemplate() " 可选:给C文件绑定快捷键触发菜单,默认<leader>是\键,按\ct即可调出 autocmd FileType c nnoremap <buffer> <leader>ct :call LoadCFileTemplate()<CR>
使用方式:
- 新建
.c文件后输入:LoadCTpl回车即可调出选择菜单,输入对应数字回车即可加载对应模板 - 也可以直接按
\ct(默认leader键为\)快速调出选择菜单
可选进阶:新建.c文件时自动弹出选择菜单
如果不想每次手动调用命令,可以配置新建.c文件时自动触发模板选择,添加如下配置即可:
if has("autocmd") augroup templates autocmd! autocmd BufNewFile *.c call LoadCFileTemplate() augroup END endif
新建.c文件时会自动弹出选择列表,选择对应模板即可,选最后一项“不使用模板”就会创建空白文件。
内容的提问来源于stack exchange,提问作者shino
相关产品推荐
相关产品推荐

