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

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


http://www.kler.cn/a/564824.html

相关文章:

  • 【Eureka 缓存机制】
  • 【js逆向入门】图灵爬虫练习平台 第八题
  • Flutter - StatefulWidget (有状态的 Widget) 和 生命周期
  • QT编译程序之属性页详细信息
  • TensorFlow Lite 详解:原理、优化及基于树莓派的实战
  • 达梦数据库授权给某个用户查询其他指定用户下所有表的权限
  • es部署报错找不到tools.jar
  • 探索未来金融世界的钥匙——代币开发
  • iconfont和TTF
  • 最好Wordpree+Apache+PHP安装教程
  • 数据结构:反射 和 枚举
  • 安装Git(小白也会装)
  • 优选算法的智慧之光:滑动窗口专题(一)
  • 百度 API 教程 006:使用BMapGL.Marker3D绘制带高度的点纹理贴图
  • 《Linux Shell 编程基础精要:语法规则、变量解析与注释技巧》
  • 2024年第十五届蓝桥杯大赛软件赛省赛Python大学A组真题解析
  • 神经网络中的Adadelta
  • 一文彻底搞懂机器学习 - 逻辑回归(Logistic Regression)
  • apache-tomcat-6.0.10版本工具资源分享
  • 【一起学Rust | Tauri2.0框架】单实例应用程序的深入解析:零漏洞实现与优化实战