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

目录

一、问题描述

1、我想要达到的效果

2、我的环境

二、更改方法

[方法一 更改.vimrc的配置](#方法一 更改.vimrc的配置)

[方法二 更改插件中的配置](#方法二 更改插件中的配置)

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

2、探索学习版

三、vim介绍


一、问题描述

1、我想要达到的效果

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

bash 复制代码
vim test.c

结果模板是这样的:

cpp 复制代码
#include <stdio.h>

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

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

cpp 复制代码
#include <myLinux.h>

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

2、我的环境

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

bash 复制代码
" Author: chxuan <[email protected]>
" Repository: https://github.com/chxuan/vimplus
" Create Date: 2016-04-10
" License: MIT

找到有autocmd的行

bash 复制代码
autocmd xxxxxxxxxxxxxxxxxxxxxxxx

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

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

二、更改方法

方法一 更改.vimrc的配置

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

bash 复制代码
autocmd BufNewFile *.c 0r ~/.vim/templates/c_template.c

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

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

cpp 复制代码
#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的文件,使用以下命令:

bash 复制代码
grep -r -nE "autocmd BufNewFile" ~/

结果为:

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

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

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

bash 复制代码
grep -r -nE "gen_prepare_code" ~

结果为:

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

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

bash 复制代码
" ==============================================================
" Author: chxuan <[email protected]>
" 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

bash 复制代码
" ==============================================================
" Author: chxuan <[email protected]>
" 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、很明显第一个文件应该是我们要找的,找到函数的定义,里面有一个路径,打开这个路径

bash 复制代码
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高手说,它的学习曲线比较陡峭,刚开始使用时可能会觉得有些复杂,但只要掌握了基本操作,它会变得非常顺手。

相关推荐
皓月盈江11 分钟前
Linux电脑本机使用小皮面板集成环境开发调试WEB项目
linux·php·web开发·phpstudy·小皮面板·集成环境·www.xp.cn
深井冰水16 分钟前
mac M2能安装的虚拟机和linux系统系统
linux·macos
leoufung41 分钟前
内核内存锁定机制与用户空间内存锁定的交互分析
linux·kernel
忧虑的乌龟蛋2 小时前
嵌入式Linux I2C驱动开发详解
linux·驱动开发·嵌入式·iic·i2c·读数据·写数据
ykjhr_3d2 小时前
数据可视化与数据编辑器:直观呈现数据价值
信息可视化·编辑器
I_Scholar3 小时前
OPENSSL-1.1.1的使用及注意事项
linux·ssl
Dddle13 小时前
C++:this指针
java·c语言·开发语言·c++
Johny_Zhao3 小时前
K8S+nginx+MYSQL+TOMCAT高可用架构企业自建网站
linux·网络·mysql·nginx·网络安全·信息安全·tomcat·云计算·shell·yum源·系统运维·itsm
稳联技术4 小时前
Ethercat转Profinet网关如何用“协议翻译术“打通自动化产线任督二脉
linux·服务器·网络
烟雨迷4 小时前
Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)
linux·服务器·学习·编辑器·vim