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