当前位置: 首页 > news >正文

如何更改vim命令创建代码文件时的默认模板

目录

一、问题描述

1、我想要达到的效果

2、我的环境

二、更改方法

方法一 更改.vimrc的配置

方法二 更改插件中的配置

1、省流极速版(如果你有这个文件,并且路径和我一样)

2、探索学习版

三、vim介绍


一、问题描述

1、我想要达到的效果

比如说我用vim命令创建一个.c文件

vim test.c

结果模板是这样的:

#include <stdio.h>

int main()
{
    printf("Hello world\n");
    return 0;
}

但是我想要更改模板为这样:

#include <myLinux.h>

int main(int argc, char * argv[]) {
    
    return 0;
}

2、我的环境

我配饰过vimplus,打开家目录下的.vimrc文件,版本如下

" Author: chxuan <787280310@qq.com>
" Repository: https://github.com/chxuan/vimplus
" Create Date: 2016-04-10
" License: MIT

找到有autocmd的行

autocmd xxxxxxxxxxxxxxxxxxxxxxxx

我的是这样,并且只有这一行!(如果你也是这样,直接看方法二,否则可以参考方法一)

autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | execute "normal! g'\"" | endif

二、更改方法

方法一 更改.vimrc的配置

1.如果你的.vimrc有类似于这样一行(以autocmd BufNewFile开头,以xxx.c结尾)

autocmd BufNewFile *.c 0r ~/.vim/templates/c_template.c

那么就在这个路径下:~/.vim/templates/c_template.c更改相应的.c文件就可以了。(没有创建文件)

本人vim新手由于只找到了这一个解决办法,也跟着做了方法一,在.vimrc文件中添加了上述命令,重新创建一个.c文件,结果如下:

#include <stdio.h>

int main()
{
    printf("Hello world\n");
    return 0;
}

#include <myLinux.h>

int main(int argc, char * argv[]) {
    
    return 0;
}

完蛋!以前还在,并且新的模板也进来了,这个时候有点崩溃,无力感一下就来了;反思应该是vim插件的影响,于是我在家目录下找所有包括autocmd BufNewFile的文件,便找到了方法二。

方法二 更改插件中的配置

1、省流极速版(如果你有这个文件,并且路径和我一样)

路径为:~/.vim/plugged/prepare-code

该文件夹下相应的文件为:

如果上面和我都一样,直接更改snippet目录下的snippet.c文件,然后保存即可。

2、探索学习版

1、我在家目录下找所有包括autocmd BufNewFile的文件,使用以下命令:

grep -r -nE "autocmd BufNewFile" ~/

结果为:

感觉只有最后一行比较符合要求

autocmd BufNewFile *.cpp,*.cc,*.c,*go,*.hpp,*.h,*.sh,*.py execute ":call prepare#prepare#gen_prepare_code()"

2、于是去找该命令后面执行的函数gen_prepare_code()

grep -r -nE "gen_prepare_code" ~

结果为:

3、前三行在同一个文件,而最后一行刚才也出现过,不放都打开看一下

.vim/plugged/prepare-code/autoload/prepare/prepare.vim

" ==============================================================
" Author: chxuan <787280310@qq.com>
" Repository: https://github.com/chxuan/prepare_code
" Create Date: 2018-05-29
" License: MIT
" ==============================================================

" 生成预定于代码
function! prepare#prepare#gen_prepare_code()
    let suffix = prepare#util#get_current_file_suffix()
    call <sid>gen_prepare_code_by_suffix(suffix)
endfunction

" 根据后缀名生成代码
function! s:gen_prepare_code_by_suffix(suffix)
    if a:suffix == "sh"
        call <sid>gen_bash_code()
    elseif a:suffix == "py"
        call <sid>gen_python_code()
    elseif a:suffix == "c"
        call <sid>gen_c_code()
    elseif a:suffix == "go"
        call <sid>gen_Go_code()
    elseif a:suffix == "h" || a:suffix == "hpp"
        call <sid>gen_cpp_header_code()
    elseif a:suffix == "cpp" || a:suffix == "cc"
        call <sid>gen_cpp_implement_code()
    endif
endfunction

" 生成Go代码
function! s:gen_Go_code()
    let lines = <sid>get_prepare_code("go")
    call prepare#util#write_texts(lines)
endfunction

" 生成bash代码
function! s:gen_bash_code()
    let lines = <sid>get_prepare_code("sh")
    call prepare#util#write_texts(lines)
endfunction

" 生成python代码
function! s:gen_python_code()
    let lines = <sid>get_prepare_code("py")
    call prepare#util#write_texts(lines)
endfunction

" 生成c代码
function! s:gen_c_code()
    let lines = <sid>get_prepare_code("c")
    call prepare#util#write_texts(lines)
endfunction

" 生成cpp头文件代码
function! s:gen_cpp_header_code()
    let lines = <sid>get_prepare_code("h")
    let target = prepare#util#get_current_file_base_name()
    let texts = prepare#util#replace_texts(lines, "snippet", target)
    call prepare#util#write_texts(texts)
endfunction

" 生成cpp实现代码
function! s:gen_cpp_implement_code()
    let lines = <sid>get_prepare_code("cpp")
    call prepare#util#write_texts(lines)
endfunction

" 获取代码片段
function! s:get_prepare_code(suffix)
    let file_path = g:prepare_code_plugin_path . "/snippet/snippet." . a:suffix
    return prepare#util#read_file(file_path)
endfunction

.vim/plugged/prepare-code/plugin/prepare_code.vim

" ==============================================================
" Author: chxuan <787280310@qq.com>
" Repository: https://github.com/chxuan/prepare_code
" Create Date: 2018-05-29
" License: MIT
" ==============================================================

if exists("g:prepare_code")
    finish
endif

let g:prepare_code = 1

autocmd BufNewFile *.cpp,*.cc,*.c,*go,*.hpp,*.h,*.sh,*.py execute ":call prepare#prepare#gen_prepare_code()" 

4、很明显第一个文件应该是我们要找的,找到函数的定义,里面有一个路径,打开这个路径

let file_path = g:prepare_code_plugin_path . "/snippet/snippet." . a:suffix

此时茅塞顿开,更改snippet.c中的内容,并验证,更改成功。

三、vim介绍

Vim 是一个非常强大的文本编辑器,广泛用于编程和日常文本处理。它的核心特点是通过键盘快捷键和命令来进行编辑,而不是通过鼠标操作,所以上手初期可能有些陡峭,但一旦掌握,效率非常高。

Vim 的界面非常简洁,只有一个窗口,界面上没有很多额外的按钮或者控件。它最主要的特色是模式化操作:它有不同的“模式”,比如普通模式(Normal Mode)、插入模式(Insert Mode)、命令模式(Command Mode)等。在不同的模式下,按键的功能也不同。例如,在普通模式下按 i 进入插入模式,按 : 进入命令模式。

对于一些常见的编辑任务,比如查找、替换、跳转、删除、复制等,Vim 提供了非常简洁且强大的命令和快捷键,熟练使用后,可以大大提高文本编辑的效率。

另外,Vim 还是高度可定制的,可以通过配置文件、插件等方式来增强其功能,支持各种编程语言和工作流。很多开发者尤其是后端开发、系统管理员等,喜欢使用 Vim,因为它速度快、占用资源少、能够高效处理大文件。

听vim高手说,它的学习曲线比较陡峭,刚开始使用时可能会觉得有些复杂,但只要掌握了基本操作,它会变得非常顺手。

相关文章:

  • 【Go】十七、grpc 服务的具体功能编写
  • 核弹级技术革命——搭配deepseek-r1满血版的腾讯云ai助手(codex)仅用14天独立开发出适配ARM架构的微内核操作系统!
  • python 学习笔记
  • 《 C++ 点滴漫谈: 二十七 》告别低效!C++ 输入输出操作你真的会用吗?
  • Apache Tomcat RCE 稳定复现 保姆级!(CVE-2024-50379)附视频+POC
  • Git:多人协作
  • 什么是 Netty
  • git从零学起
  • Windows用户如何零成本迁移Sketch项目?2025实测方案推荐
  • APISIX Dashboard上的配置操作
  • 本地快速搭建一套AI人脸识别技术研究学习的实验环境
  • 【Yonghong GoldenDB 】GoldenDB 安装部署
  • 深度学习-10.门控循环网络
  • AI数字人技术源码开发分享:革新短视频营销策略
  • DaoCloud 亮相 2025 GDC丨开源赋能 AI 更多可能
  • Python实现GO鹅优化算法优化Catboost回归模型项目实战
  • k8s新增Node节点 简单易上手 如何给k8s新添加node节点
  • 千字详解Spring bean的作用域
  • std::set详解与应用:生成不重复的字符,确保每个字符唯一
  • Linux驱动学习(三)--字符设备架构与注册
  • 建设网站前需要的市场分析/推广公司经营范围
  • 广州专业做网站/全国免费发布广告信息
  • 网站静态页面做网站/google关键词搜索技巧
  • 公司建设网站价格多少钱/如何推广产品
  • 做音乐的网站/百度竞价推广的技巧
  • 网站模板预览与编辑器/外包公司是正规公司吗