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

相关推荐
草莓熊Lotso8 分钟前
【数据结构初阶】--算法复杂度的深度解析
c语言·开发语言·数据结构·经验分享·笔记·其他·算法
KyollBM14 分钟前
【CF】Day75——CF (Div. 2) B (数学 + 贪心) + CF 882 (Div. 2) C (01Trie | 区间最大异或和)
c语言·c++·算法
筏.k1 小时前
grep、wc 与管道符快速上手指南
linux
Johny_Zhao1 小时前
华为MAAS、阿里云PAI、亚马逊AWS SageMaker、微软Azure ML各大模型深度分析对比
linux·人工智能·ai·信息安全·云计算·系统运维
CodeOfCC1 小时前
c语言 封装跨平台线程头文件
linux·c语言·windows
科文小白狼1 小时前
Linux下VSCode开发环境配置(LSP)
linux·vscode·里氏替换原则·lsp
momo卡2 小时前
MinGW-w64的安装详细步骤(c_c++的编译器gcc、g++的windows版,win10、win11真实可用)
c语言·c++·windows
jugt3 小时前
CentOS 7.9安装Nginx1.24.0时报 checking for LuaJIT 2.x ... not found
linux·运维·centos
超的小宝贝3 小时前
数据结构算法(C语言)
c语言·数据结构·算法
多多*4 小时前
LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考
linux·开发语言·redis·python·bootstrap·lua