前言:
在编写代码时,为了提高代码的可读性和维护性,我们经常在文件的头部添加一些信息提示,如作者、日期、版本号等。本文介绍了如何在 Vim 编辑器中实现自动添加信息提示的功能。
结尾提供~/.vimr参考配置,可提高代码编写速度(例如:自动缩进、自动补全等)
配置:
当使用 Vim 编辑器时,我们可以通过一些配置来实现在新建文件时自动添加信息提示的功能。下面将详细介绍如何设置。(一共分两步)
第一步:确认你是否已经有 `.vim` 或 `.vimrc` 目录。如果没有,请按照以下步骤创建:
1. 打开终端并进入用户主目录:
cd ~
2. 创建 `.vim` 目录:
mkdir .vim
3. 进入 `.vim` 目录:
cd .vim
4. 创建 `templates` 目录:
mkdir templates
5. 进入 `templates` 目录:
cd templates
6. 创建`skeleton.c`:(模板文件)
vim skeleton.c
7. 将下面模版内容复制到`skeleton.c`下:(可根据自己实际情况修改)
/*
* Filename: %FILENAME%
* Author: %AUTHOR%
* Date: %DATE%
* Version: %VERSION%
*
* Description: The purpose of this code.
*/
#include <stdio.h>
int main()
{
return 0;
}
第二步:修改 Vim 的配置文件 `~/.vimrc`,添加相应的配置。如果该文件不存在,请按以下步骤创建:
1. 在终端中进入用户主目录:
cd ~
2. 创建 `.vimrc` 文件:
touch .vimrc
3. 使用文本编辑器(如 Vim)打开 `.vimrc` 文件:
vim .vimrc
在 `~/.vimrc` 文件中,我们可以定义一个函数来替换模板中的占位符,并在新建文件时调用这个函数。以下是一个示例的 `~/.vimrc` 配置:(添加如下信息即可)
" 获取当前用户名
let s:current_user = $USER
" 设定默认版本号
let s:default_version = "1.0"
function! ReplaceTemplateVariables(timer_id)
let l:current_date = strftime("%Y-%m-%d")
let l:current_filename = expand('%:t')
" 替换对应的占位符
execute "%s/%DATE%/" . l:current_date . "/g"
execute "%s/%FILENAME%/" . l:current_filename . "/g"
execute "%s/%AUTHOR%/" . s:current_user . "/g"
execute "%s/%VERSION%/" . s:default_version . "/g"
" 设置光标位置
call cursor(13, 1)
endfunction
" 安装 Timer 插件(如果尚未安装)
if !exists('g:loaded_timer') && !exists('g:did_timer_plugin')
silent! timer defer timer_start 1
let g:did_timer_plugin = 1
endif
autocmd BufNewFile *.c 0r ~/.vim/templates/skeleton.c | call timer_start(100, 'ReplaceTemplateVariables')
在这个配置中,我们首先获取当前的用户名和设定默认的版本号。然后,定义了一个函数 `ReplaceTemplateVariables`,它会在新建文件时被调用。这个函数会获取当前的日期和文件名,并将这些信息替换。
测试:以上配置完毕后,正常`vim file.c`,即可验证。
参考(~/.vimrc配置):
以下是我编程时.vimrc设置:根据自己的习惯慢慢完善(这里仅作参考)
" 获取当前用户名
let s:current_user = $USER
" 设定默认版本号
let s:default_version = "1.0"
function! ReplaceTemplateVariables(timer_id)
let l:current_date = strftime("%Y-%m-%d")
let l:current_filename = expand('%:t')
" 替换对应的占位符
execute "%s/%DATE%/" . l:current_date . "/g"
execute "%s/%FILENAME%/" . l:current_filename . "/g"
execute "%s/%AUTHOR%/" . s:current_user . "/g"
execute "%s/%VERSION%/" . s:default_version . "/g"
" 设置光标位置
call cursor(10, 1)
endfunction
" 安装 Timer 插件(如果尚未安装)
if !exists('g:loaded_timer') && !exists('g:did_timer_plugin')
silent! timer defer timer_start 1
let g:did_timer_plugin = 1
endif
autocmd BufNewFile *.c 0r ~/.vim/templates/skeleton.c | call timer_start(100, 'ReplaceTemplateVariables')
" 设置编码为 UTF-8
set encoding=utf-8
" 设置制表符宽度为4个空格
set tabstop=4
set shiftwidth=4
" 将制表符自动转换为空格
set expandtab
" 显示行号、标尺和相对行号
set number
set ruler
set relativenumber
" 自动缩进和智能缩进
set autoindent
set smartindent
" 显示匹配的括号
set showmatch
" 开启自动换行
set wrap
" 高亮显示当前行
set cursorline
" 代码折叠设置
" 单个折叠/打开(切换):zc/zo(za)
" 全部折叠/打开:zM/zR
set foldmethod=indent "使用缩进来折叠代码
set foldlevel=99 "默认打开所有折叠
" 开启搜索时忽略大小写
set ignorecase
" 搜索时自动高亮匹配项
set hlsearch
" 自己设置快捷键,根据自己习惯设置即可
nmap H ^i
nmap L $a
nmap J 3j
nmap K 3k
" 自动补全括号,根据自己的习惯设置即可
inoremap ( ()<Left>
inoremap [ []<Left>
inoremap { {<CR>}<Esc>O
inoremap " ""<Left>
inoremap ' ''<Left>
inoremap ` ``<Left>
" 删除成对符号内的全部内容,保留符号
nnoremap di( di(bi<Right>
nnoremap di[ di[bi<Right>
nnoremap di' di'bi<Right>
nnoremap di" di"bi<Right><Right>
nnoremap di` di`bi<Right>
" 启用文件类型检测
filetype plugin on
filetype indent on
总结:
根据自己的实际情况,可跟着一步一步复制执行,注意vim内容复制时(要先进入编辑模式,例如:按下i),有问题可以发在评论区。