【Vim编辑器】编码技巧:模板(自动添加信息)+配置参考(~/.vimrc)

news2024/12/25 12:48:47

前言:

        在编写代码时,为了提高代码的可读性和维护性,我们经常在文件的头部添加一些信息提示,如作者、日期、版本号等。本文介绍了如何在 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),有问题可以发在评论区。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/721750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

短视频seo矩阵+抖音小程序源码开源部署(二)

一、 开发思路&#xff1a; 通过短视频seo矩阵抖音小程序的形式&#xff0c;实现视频的批量制作&#xff0c;小程序内容批量挂载&#xff0c;客户线索批量收集&#xff0c;实现企业运营价值最大化。开发逻辑&#xff1a;通过短视频矩阵布局seo搜索关键词&#xff0c;接入小程序…

Elasticsearch:文档版本控制和乐观并发控制

在今天的文章中&#xff0c;我来详细描述一下 Elasticsearch 文档的版本控制以及如何更新文档。你也可以阅读我之前的文章 “Elasticsearch&#xff1a;深刻理解文档中的 verision 及乐观并发控制”。 版本控制 我们知道 Elasticsearch 的每个文档都有一个相对应的版本。这个版…

GO微服务简介及特性介绍

微服务特性 一、微服务简介-构建单体应用 互联网技术发展迅速的今天&#xff0c;微服务倍受关注&#xff1a;文章、博客、社交媒体讨论和会议演讲都在谈论。与此同时&#xff0c;也有持怀疑态度的软件社区人员认为微服务没什么新鲜可言。反对者声称它的思想只是面向服务架构的…

Windows系统安装JAVA步骤流程(超详细)

超详细的Windows系统安装JAVA步骤流程&#xff0c;Windows操作系统安装java&#xff0c;先下载JDK&#xff0c;然后配置环境变量&#xff0c;阿里云百科分享详细安装流程如下&#xff1a; 目录 Window操作系统安装java流程 下载JDK 配置环境变量 JAVA_HOME 设置 PATH设置…

Centos安装RabbitMQ

#安装 yum install rabbitmq-server #启动 systemctl start rabbitmq-server #查看状态 systemctl status rabbitmg-server #安装管理插件 rabbitmg-plugins enable rabbitmg_management #新增admin账号 rabbitmqctl add_user admin admin #设置为管理员 rabbitmqctl set_user_…

电子电气架构——车载DoIP通信

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人们会在生活中不断攻击你。他们的主要武器是向你灌输对自己的怀疑:你的价值、你的能力、你的潜力。他们往往会将此伪装成客观意见,但无一例外的是…

基于FreeRTOS的嵌入式设备管理关键技术研究及实现(学习二)

嵌入式操作系统FreeRTOS FreeRTOS是一个专门为轻量级嵌入式应用设计的迷你操作系统&#xff0c;它的主要功能由IPC、时钟管理、内存管理、任务通知以及任务调度等部分构成。 FreeRTOS的代码可以分解为三个主要区块&#xff1a;任务调度、通讯、硬件库。 任务调度&#xff1a;F…

windows环境安装robotframework-ride

在Windows环境下&#xff0c;可以通过以下步骤安装Robot Framework RIDE&#xff1a; 安装Python 首先&#xff0c;需要在Windows环境下安装Python。建议使用Python 3.x版本&#xff0c;可以从官方网站下载并安装&#xff1a;https://www.python.org/downloads/windows/ 安装w…

shiro登录认证

一&#xff0c;创建数据库 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS user; CREATE TABLE user ( uid int(11) NOT NULL AUTO_INCREMENT, uname va…

opencv中Rect()类与rectangle()函数详解

文章目录 Rect()矩形类1、实例化 Rect() 类&#xff1a;&#xff08;1&#xff09;构造函数&#xff1a; 2、Rect类的成员函数&#xff08;1&#xff09;rect.size() 和 rect.area() 和 rect.width() 和 rect.height()&#xff0c;用来描述矩形的宽度&#xff0c;高度&#xff…

SQL专家云回溯某时间段内的阻塞

背景 SQL专家云像“摄像头”一样&#xff0c;对环境、参数配置、服务器性能指标、活动会话、慢语句、磁盘空间、数据库文件、索引、作业、日志等几十个运行指标进行不同频率的实时采集&#xff0c;保存到SQL专家云自己的数据库中。因此可以随时对任何一个时间段进行回溯。 趋势…

基于C++、GDAL、OpenCV的矢量数据骨架线提取算法

基于C、GDAL、OpenCV的矢量数据骨架线提取算法 CGAL已经实现了该功能&#xff0c;但由于CGAL依赖于Boost库&#xff0c;编译后过大&#xff0c;因此本文所采用的这套方式实现骨架线提取功能。 效果&#xff1a; 思路&#xff1a; 1、将导入shp按照要素逐一拆分成新的shp 2、…

java中如何将一个集合list转成以逗号隔开的字符串

事例代码 代码&#xff1a; package com.air.app;import java.util.ArrayList; import java.util.List;public class ListToStringTest {public static void main(String[] args) {//定义list集合List<String> list new ArrayList<>();list.add("1");…

SolidUI AI生成可视化,开创性开源项目,版本0.1.0 功能讲解

文章目录 背景项目名字含义登录页含义产品思维0.1.0 版本内涵功能列表数据源管理项目管理设计页面 背景 随着文本生成图像的语言模型兴起&#xff0c;SolidUI想帮人们快速构建可视化工具&#xff0c;可视化内容包括2D,3D,3D场景&#xff0c;从而快速构三维数据演示场景。Solid…

多元分类预测 | Matlab基于麻雀算法优化深度置信网络(SSA-DBN)的分类预测,多特征输入模型,SSA-DBN分类预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab基于麻雀算法优化深度置信网络(SSA-DBN)的分类预测,多特征输入模型,SSA-DBN分类预测 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程…

linux_driver_day03

作业1 题目&#xff1a; 通过ioctl函数选择不同硬件的控制&#xff0c;LED 蜂鸣器 马达 风扇 代码&#xff1a; 代码太多只展示 led 部分&#xff0c;点击查看完整代码 led.c #include "led.h" #include "head.h"static void all_led_init(void);stati…

问题1:矩阵置零 问题2:搜索二维矩阵

问题1&#xff1a;矩阵置零 给定一个 *m* x *n* 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 解题思路&#xff1a; 1.先遍历一遍矩阵&#xff0c;将元素为0的行和列都标记为true 2.再遍历一遍矩阵&#xff0c…

Element 实现动态增加多个输入框并校验

文章目录 前言实现通过按钮动态增加表单并验证必填实现动态多个输入框为行内模式&#xff0c;其它为行外模式 前言 在做复杂的动态表单&#xff0c;实现业务动态变动&#xff0c;比如有一条需要动态添加的el-form-item中包含了多个输入框&#xff0c;并实现表单验证&#xff0…

Visual Studio Code 如何设置整体界面字体的大小?

在某次操作中&#xff0c;我不小心误点了什么&#xff0c;导致 Visual Studio Code 界面的字体变小了很小&#xff0c;如下图所示&#xff1a; 我想把字体调整回来&#xff0c;该如何操作呢&#xff1f; 首先&#xff0c;第一步&#xff0c;打开设置&#xff1a; 第二步&#…

MiniLED是什么?有怎样的发展前景

Mini LED又叫做“次毫米发光二极管”&#xff0c;也是LED器件的一种&#xff0c;其芯片尺寸介于50~200μm之间。Mini LED的组成包括Mini LED像素阵列以及驱动电路&#xff0c;而且像素中心间距的单元较小&#xff0c;仅为0.3-1.5mm单元。随着 Mini LED 显示技术的快速发展&…