【vim】Linux使用vim编写代码:头部自动添加提示信息+自动缩进、自动换行等配置(~/.vimrc)

news2025/1/10 23:49:31

前言:

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

" 设置编码为 UTF-8
set encoding=utf-8

" 启用语法高亮
syntax enable

" 设置主题
colorscheme default

" 设置缩进
set tabstop=4
set shiftwidth=4
set expandtab

" 显示行号
set number

" 自动缩进
set autoindent

" 显示匹配的括号
set showmatch

" 开启自动换行
set wrap

" 开启搜索时忽略大小写
set ignorecase

" 搜索时自动高亮匹配项
set hlsearch

" 设置备份文件和交换文件保存位置


" 自动补全括号
inoremap ( ()<Left>
inoremap [ []<Left>
inoremap { {}<Left>
inoremap " ""<Left>
inoremap ' ''<Left>
inoremap ` ``<Left>

" 启用鼠标支持
set mouse=a

" 启用文件类型检测
filetype plugin on
filetype indent on

总结:

         根据自己的实际情况,可跟着一步一步复制执行,注意vim内容复制时(要先进入编辑模式,例如:按下i),有问题可以发在评论区。

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

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

相关文章

第2章 变量

目录 1 变量1.1 什么是变量&#xff1f;1.2 声明变量1.2 变量的原理 2 数据类型2.1 基本数据类型2.1.1 取值范围公式2.1.2 整型2.1.3 浮点型2.1.4 字符型2.1.5 布尔型 2.2 引用数据类型2.2.1 数组[]2.2.2 类class2.2.3 接口interface 3 数据类型转换3.1 自动类型转换3.2 强制类…

备份c盘中的所有数据的3种方法推荐!

为什么要备份C盘中的所有数据&#xff1f; 备份c盘中的所有数据&#xff0c;主要是为了避免以下几种突发情况&#xff1a; 感染病毒。 操作不当导致系统文件损坏&#xff0c;崩溃。 蓝屏死机&#xff08;BOSD&#xff09;或黑屏死机。 物理灾害。 磁盘出现物理坏道等。…

QWebEngine应用---cookies存储及自动登录

什么是cookies&#xff1f; 浏览器Cookie指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据&#xff0c;当前主流网站和浏览器都使用Cookies来实现自动登录 QWebEngineCookieStore QWebEngine基于Chromium内核&#xff0c;和Chrome浏览器一样支持…

微信聚合聊天,轻松一人管理多个微信

看这篇文章的你是否有以下烦恼&#xff1a; 1.微信账号太多&#xff0c;管理过于麻烦 2.微信号多&#xff0c;需要很多员工来管理&#xff0c;人工费用多 3.多个微信打开后会造成微信登陆界面过多&#xff0c;切换操作十分不方便 4.当微信多的时候&#xff0c;新消息提示也多…

docker安装nacos并配置数据库

1、下载镜像 docker pull nacos/nacos-server 查看下载镜像 docker images 2、启动nacos 注意&#xff1a;如果nacos版本在2.0及以上&#xff0c;需要把8848、9848和9849三个端口映射出来&#xff0c;否则访问会404失败 docker run --env MODEstandalone \ --name nacos -d…

【AI新趋势期刊#2】AI发明计算机算法,如何给大模型排行,照片秒变二维码,视频一键动漫风

前言 每天都要浏览大量AI相关新闻&#xff0c;是不是感到信息量爆炸&#xff0c;有效信息少&#xff1f; 这么多新产品和新工具&#xff0c;到底哪些是真正是有价值的&#xff0c;哪些只是浮躁的一时热点&#xff1f; 想参与AI产品和工具的开发&#xff0c;从哪里能够获得大…

MongoDB【MongoDB命令、CRUD操作 】(二)-全面详解(学习总结---从入门到深化)

目录 MongoDB命令 CRUD操作 MongoDB命令 基本操作 查看数据库 show dbs; 切换数据库 如果没有对应的数据库则创建 use 数据库名;创建集合 db.createCollection("集合名") 查看集合 show tables; show collections; 删除集合 db.集合名.drop(); 删除当前…

Robust Secure Aggregation with Lightweight Verification for Federated Learning

摘要&#xff1a; 可验证的安全聚合&#xff08;VSA&#xff09;是联邦学习&#xff08;FL&#xff09;中的关键过程&#xff0c;其中安全聚合实现局部梯度聚合&#xff0c;同时保留数据机密性&#xff0c;并且可验证性使参与者能够验证中央服务器&#xff08;CS&#xff09;返…

【Linux】程序替换

&#x1f525;&#x1f525; 欢迎来到小林的博客&#xff01;&#xff01;       &#x1f6f0;️博客主页&#xff1a;✈️小林爱敲代码       &#x1f6f0;️博客专栏&#xff1a;✈️Linux之路       &#x1f6f0;️社区 :✈️ 进步学堂       &a…

51单片机地震监测语音报警提示系统MPU6050TTS报警

实践制作DIY- GC0153--- 地震监测语音报警提示系统 基于51单片机设计------- 地震监测语音报警提示系统 二、功能介绍&#xff1a; STC89C52单片机TTS语音播报模块MPU-6050角度传感器LED灯显示一个按键 1.获取MPU-6050角度数据&#xff0c;然后根据角度数据计算出0~10级的地震…

B站w_rid,qv_id加密分析

本文仅供学习交流&#xff0c;只提供关键思路不会给出完整代码&#xff0c;严禁用于非法用途&#xff0c;若有侵权请联系我删除&#xff01; 网站地址&#xff1a;aHR0cHM6Ly9zZWFyY2guYmlsaWJpbGkuY29tL2FsbD92dD03OTExMjUwNSZrZXl3b3JkPSVFNyU4OCVBQyVFOCU5OSVBQg 关键字搜…

Flutter 布局构建

文章目录 一、布局类组件简介二、理解 Flutter 布局约束三、线性布局&#xff08;Row和Column&#xff09;1. 主轴和纵轴2. Row3. Column4. 特殊情况 四、弹性布局&#xff08;Flex 和 Expanded&#xff09;1. Flex2. Expanded 五、流式布局&#xff08;Wrap 和 Flow&#xff0…

记录一次Ubuntu系统安装tenforflow

电脑已有版本 Ubuntu 20.04GCC 9.4.0CUDA 11.3 需要指定版本的python库 tensorflow 2.6.0numpy 1.19.2matplotlib 3.4.0keras 2.6.0protobuf 3.19.6 我的环境

LeetCode刷题 | 583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 "…

Flutter Bloc组件buildWhen的妙用

在Flutter中当状态发生改变的时候,Widget会重新build刷新页面。但是当状态发生改变的时候后,我们指向让有关联的Widget重绘,与之无关的Widget保持不变,比如对于登录页面,有用户名和密码两个组件:如下图。 构建代码如下: 当我们输入用户名的时候,仅仅希望_UserNameInp…

C语言王国探险记之转义字符+结构语句

王国探险记系列 文章目录&#xff08;4&#xff09; 一&#xff0c;什么是转义字符 1.1转义字符的重要性&#xff1f; 二&#xff0c;了解一下转义字符有那些 三&#xff0c;精讲转义字符 3.1转义字符\n 3.2转义字符\? 3.3转义字符 \‘和\" 3.3转义字符 \\ 3.4转义字…

【云原生丶Kubernetes】Kubernetes初体验

人生若只如初见&#xff0c;何事秋风悲画扇。 前言 Kubernetes 是目前最流行的容器编排工具之一&#xff0c;由Google开发并维护。它提供了完整的容器编排解决方案&#xff0c;包括自动化部署、资源管理和调度、服务发现和负载均衡等功能。 然而&#xff0c;对于初学者来说&a…

Android Studio实现内容丰富的安卓民宿酒店预订平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号106 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看民宿 3.民…

缔造网络世界的奇迹:OSI参考模型的魔力之旅

文章目录 一 OSI参考模型1.1 OSI参考模型简介1.2 OSI参考模型的下特性和优点1.3 OSI参考模型的层次结构1.4 OSI参考模型层次间的关系以及数据封装 二 OSI参考模型的层次结构详解2.1 物理层2.2 数据链路层2.3 网络层2.3.1 网络层地址2.3.2 路由协议与可路由协议2.3.3 面向连接和…

激光SLAM(二):点云拟合和平面参数化

点云拟合和平面参数 一、平面拟合&#xff1a;特征值法和SVD法二、平面参数化1&#xff09;Hesse形式2&#xff09;球坐标3&#xff09;最近点4) 单位四元数 三、直线拟合 一、平面拟合&#xff1a;特征值法和SVD法 平面方程如下&#xff0c;n是法向量&#xff0c;d是截距 当…