嵌入式驱动学习第一周——vim的使用
前言
本篇博客学习使用vim,vim作为linux下的编辑器,学linux肯定是绕不开vim的,因为不确定对方环境中是否安装了编译器,但一定会有vim。
对于基本的使用只需要会打开文件,保存文件,编辑文件即可。
嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关注本博主并订阅本专栏,一起讨论一起学习。现在关注就是老粉啦!
行文目录
- 前言
- 一、vim编辑器
- 二、vim的模式
- 2.1 vim四种模式的切换
- 2.2 命令模式
- 2.3 编辑模式
- 2.4 可视化模式
- 2.5 末行模式
- 三、vim的常规使用
- 3.1 打开文件
- 3.1.1 打开指定文件
- 3.1.2 打开文件并指定光标
- 3.1.2 打开文件并指定光标
- 3.2 关闭文件
- 3.2.1 保存并退出
- 3.2.2 强制退出
- 3.3 设置行号
- 3.4 保存文件
- 3.5 输入文件
- 4. 命令模式下的使用
- 4.1 移动光标
- 4.2 编辑操作
- 4.3 搜索字符
- 4.4 替换字符
- 5. 可视化模式下的使用
- 5.1 进入可视化模式方法的区别
- 5.2 添加多行注释
- 5.3 去除多行注释
- 6. 使用中出现的问题
- 7. 参考文献
一、vim编辑器
vim是vi编辑器的加强版,可以全兼容vi,最明显的区别是vim可以语法加亮。
通常情况下默认已经安装好了vi或vim,只需要通过在终端输入vim即可打开vim编辑器
使用vim打开文件时,使用tab补全文件名,如果文件不存在,则会创建一个新的文件
二、vim的模式
2.1 vim四种模式的切换
vim有四种模式:命令模式,编辑模式,可视化模式,末行模式
命令模式——可进行删除、复制、粘贴等快捷操作
编辑模式——可以编辑文件内容
可视化模式——可以做一些列选操作
末行模式——可以通过命令操作文件,如搜索、保存、退出等
不同模式之间的转化需要按esc键。
2.2 命令模式
输入vim 文件名 打开文件后,默认处于命令模式,在该模式下可以移动光标位置,通过快捷键对文件内容进行复制、粘贴、删除等操作。
2.3 编辑模式
在命令模式下输入小写字母i或a或o即可进入编辑模式,在该模式下可以对文件内容进行编辑
2.4 可视化模式
在命令模式下输入小写字母v(行)或者ctrl+v(块)即可进入可视化模式,该模式下可以做一些列选操作,通过方向键选择某些列的内容,类似于windows鼠标选中
2.5 末行模式
在命令模式下输入冒号:即可进入末行模式,可以在末行输入命令对文件进行查找、替换、保存、退出等操作。
三、vim的常规使用
3.1 打开文件
3.1.1 打开指定文件
vim 文件路径
如果文件存在,则直接打开,如果文件不存在,vim会自动创建一个新文件
编辑完成后,按两下esc退出编辑
3.1.2 打开文件并指定光标
vim +行数 文件
打开后,光标会停在指定的行,默认是在首行
3.1.2 打开文件并指定光标
vim +/关键字 文件路径
打开文件时,指定的关键字会高亮
:noh 或 :nohlsearch
退出高亮
3.2 关闭文件
3.2.1 保存并退出
在任何模式下,连续按两次esc键,即可返回到命令模式,然后按:进入末行模式,输入wq即是保存并退出。
3.2.2 强制退出
在命令模式下按:q!,强制退出但不保存文件
改错文件后,可以使用不保存强制退出
q!
3.3 设置行号
正常打开是不具有行号的,在实际使用过程中,增加行号更方便对文件修改
:set nu
取消行号用如下指令
:set nonu
3.4 保存文件
另存为文件分为两种,一种是全另存为,一种是将指定的行另存为新文件,其指令分别如下所示:
:w [文件名]
:2,5w [文件名]
3.5 输入文件
将另一个文件的内容输入到光标的下一行中需要用以下指令:
:r [文件名]
4. 命令模式下的使用
vim打开文件后,默认是命令模式,如果处于其他三种模式下,可以连续按两次esc键也可以返回命令模式。
4.1 移动光标
| 指令 | 作用 |
|---|---|
| ↑ | 向上移动一个字符 |
| ↓ | 向下移动一个字符 |
| ← | 向左移动一个字符 |
| → | 向右移动一个字符 |
| Ctrl + f | 屏幕向下移动一页 |
| Ctrl + b | 屏幕向上移动一页 |
| PgUp | 屏幕向上翻半屏 |
| PgDn | 屏幕向下翻半屏 |
| fn+home | 光标移动到行首 |
| fn+end | 光标移动到行尾 |
| gg | 移动到文件的第一行 |
| G | 移动到文件的最后一行 |
vim中的数字键表示重复次数,配合其他指令简化操作,可以快速定位
行号+G,例如
10G表示直接移动光标到第10行
10↑表示可以向下移动10行
4.2 编辑操作
| 指令 | 作用 |
|---|---|
| x | 从光标开始往后删除一个字符 |
| X | 从光标开始往前删除一个字符 |
| dd | 剪切一行,继续则删除下一行 |
| D | 剪切一行,此行空白,下行不上移 |
| n(数字)dd | 光标往下剪切n行 |
| yy | 复制当前一行 |
| n(数字)yy | 光标往下复制n行 |
| p | 粘贴到下一行 |
| P | 粘贴到上一行 |
| u | 撤回 |
| Ctrl+r | 撤回刚才u的撤回操作 |
| .(小数点) | 重复刚才的操作 |
vim中,剪切和删除都是dd
如果剪切了文件,没有使用p粘贴就是删除;如果使用了p就是剪切操作
4.3 搜索字符
| 指令 | 作用 |
|---|---|
| /字符串+ 回车 | 向下搜索指定字符串 |
| ?字符串+ 回车 | 向上搜索指定字符串 |
| n | 跳到已搜索的下一个字符串 |
| N | 跳到已搜索的上一个字符串 |
命令模式下,输入/,输入要查找或搜索的关键词,然后回车
存在多个满足条件的结果,可以上下切换结果,用n和N
取消高亮则输入:noh
4.4 替换字符
| 指令 | 作用 |
|---|---|
| : s/string1/string2/g | 将光标所在行的string1替换为string2 |
| :%s/string1/string2g | 将全文的string1替换为string2 |
| :%s/string1/string2/gc | 将文件中的string1替换为string2,但替换前需要用户确认 |
| :1,10s/string1/string2/g | 将第1行到第10行的string1替换为string2 |
s 是只替换光标所在行的第一个满足条件的结果,只替换1次
/g 表示全局
%s表示对整个文档的所有行替换
1,10s表示对指定行进行替换,此处为1到10行进行替换
5. 可视化模式下的使用
5.1 进入可视化模式方法的区别
在命令模式下,按小写的v进入可视模式,可以左右上下选单个字符;而按大写的V进入可视行模式,只能上下选行;ctrl+v进入可视列模式,对文本整块选择。
5.2 添加多行注释
按
esc退出到命令模式,按gg切换到第1行
按ctrl+v进入可视列模式
使用上下键选择要注释的行
按下大写的I进入插入模式
输入注释符号(此时只显示第一行有注释,继续就行)
完成后按两次esc完成多行注释
5.3 去除多行注释
按
esc退出到命令模式,按gg切换到第1行
按ctrl+v进入可视列模式
方向键选中要移除的注释
按d删除注释
6. 使用中出现的问题
如果意外断开vim没有保存,再打开会报错
原因是已经生成了临时文件.xxx.swap,用ls -a 找到文件,并用rm -tf删掉次临时文件即可正常打开
7. 参考文献
[1] vim 编辑器使用详解
相关文章:
嵌入式驱动学习第一周——vim的使用
前言 本篇博客学习使用vim,vim作为linux下的编辑器,学linux肯定是绕不开vim的,因为不确定对方环境中是否安装了编译器,但一定会有vim。 对于基本的使用只需要会打开文件,保存文件,编辑文件即可。 嵌入式驱动…...
loop_list单向循环列表
#include "loop_list.h" //创建单向循环链表 loop_p create_head() { loop_p L(loop_p)malloc(sizeof(loop_list)); if(LNULL) { printf("create fail\n"); return NULL; } L->len 0; L->nextL; retur…...
Python爬虫实战第二例【二】
零.前言: 本文章借鉴:Python爬虫实战(五):根据关键字爬取某度图片批量下载到本地(附上完整源码)_python爬虫下载图片-CSDN博客 大佬的文章里面有API的获取,在这里我就不赘述了。 一…...
Eclipse是如何创建web project项目的?
前面几篇描述先后描述了tomcat的目录结构和访问机制,以及Eclipse的项目类型和怎么调用jar包,还有java的main函数等,这些是一些基础问题,基础高清出来才更容易搞清楚后面要说的东西,也就是需求带动学习,后面…...
Excel的中高级用法
单元格格式,根据数值的正负分配不同的颜色和↑ ↓ 根据数值正负分配颜色 2-7 [蓝色]#,##0;[红色]-#,##0 分配颜色的基础上,根据正负加↑和↓ 2↑-7↓ 其实就是在上面颜色的代码基础上加个 向上的符号↑,或向下的符号↓ [蓝色]#,##0↑;[红色…...
【ArcGIS】基本概念-空间参考与变换
ArcGIS基本概念-空间参考与变换 1 空间参考与地图投影1.1 空间参考1.2 大地坐标系(地理坐标系)1.3 投影坐标系总结 2 投影变换预处理2.1 定义投影2.2 转换自定义地理(坐标)变换2.3 转换坐标记法 3 投影变换3.1 矢量数据的投影变换…...
Qt QWidget 简约美观的加载动画 第五季 - 小方块风格
给大家分享两个小方块风格的加载动画 😊 第五季来啦 😊 效果如下: 一个三个文件,可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QGridLayout> int main(int argc, char *arg…...
针对KZG承诺和高效laconic OT的extractable witness encryption
1. 引言 2024年以太坊基金会等成员论文 Extractable Witness Encryption for KZG Commitments and Efficient Laconic OT,开源代码实现见: https://github.com/rot256/research-we-kzg(Rust) 在该论文中,提供了一种…...
Spring Boot中实现列表数据导出为Excel文件
点击下载《Spring Boot中实现列表数据导出为Excel文件》 1. 前言 本文将详细介绍在Spring Boot框架中如何将列表数据导出为Excel文件。我们将通过Apache POI库来实现这一功能,并解释其背后的原理、提供完整的流程和步骤,以及带有详细注释的代码示例。最…...
华为ipv6 over ipv4 GRE隧道配置
思路: PC1访问PC2时,会先构造源ipv6为2001:1::2,目的IPV6为2001:2::2的ipv6报文,然后查看PC1的路由表,发送到R1,r1接收后,以目的IPV6地址2001:2::2查询IPV6路由表,出接口为tun0/0/0…...
项目解决方案:海外门店视频汇聚方案(全球性的连锁店、国外连锁店视频接入和汇聚方案)
目 录 一、概述 二、建设目标及需求 2.1 建设目标 2.2 需求描述 2.3 需求分析 三、建设方案设计 3.1 系统方案拓扑图 3.2 方案描述 3.3 服务器配置推荐 四、产品功能 4.1 资源管理平台 (1)用户权限管理 (2)…...
Java中的数据类型详解
引言 在Java编程中,数据类型是非常重要的概念,它定义了数据的类型和范围,帮助程序员有效地操作数据。Java的数据类型可以分为两大类:基本数据类型和引用数据类型。本文将详细介绍Java中的各种数据类型,并附上相应的代…...
ABBYY FineReader16文档转换、PDF管理与文档比较功能介绍
ABBYY FineReader 16作为一款OCR和PDF一体化程序,其强大的功能使得文档处理变得简单高效。在众多功能中,文档转换、PDF管理和文档比较这三大功能尤为突出,成为了众多企业和个人用户的首选工具。 ABBYY Finereader 16-安装包下载如下ÿ…...
导览系统厂家|景区电子导览|手绘地图|AR导览|语音导览系统
随着元宇宙、VR、AR等新技术的快速发展,旅游服务也更加多元化、智能化。景区导览系统作为旅游服务的重要组成部分,其形式更加多元化智能化。智能导览系统作为一种新的服务方式,能够为游客提供更加便捷的旅游服务和游览体验,也逐渐…...
oracle 如何使用脚本实现访问控制(无需额外插件)
随着这些年勒索病毒的爆发,各个企业对数据安全的要求越来越高,常见的办法有开启数据库审计,加数据库防火墙,网络限制等等;但是细粒度审计会消耗大量系统资源,第三方数据库防火墙一般是需要收费的;这里介绍我个人常用的四个db级别trigger,用于记录部分关键信息可以应对部…...
【C语言】指针初阶
正文开始之前,我们要记住一个东西就是:地址指针 目录 一、指针的解释二、指针变量和地址1、取地址操作符2、指针变量和解引用操作1、指针变量2、拆解指针类型3、解引用操作符4、注意事项 3、指针变量的大小4、指针的解引用5、void*指针 三、指针的运算1、…...
07_html
文章目录 引言前端概述分类 HTML快速入门重要的body标签注释hr标签br标签一些常见的标签标题标签div标签span标签p标签a标签img标签路径问题 ol和ul标签table标签input标签(表单元素)textarea标签(表单元素)select标签(…...
全量知识系统问题及SmartChat给出的答复 之1
Q1. 一套完整的全量知识系统应该有哪些组成部分? 一套完整的全量知识系统应该包括以下组成部分: 数据采集:收集、整理、清洗和存储各种数据,包括结构化数据、半结构化数据和非结构化数据等。 数据存储和管理:建立可靠…...
【appium】App类型、页面元素|UiAutomator与appium|App元素定位
目录 一、App前端基础知识 1、App类型划分 2、App类型对比 3、App页面元素 App页面元素分为布局和控件两种 常见布局: 常见控件:定位软件:appium和sdk自带的uiautomatorviewer都可以定位 二、App元素定位 1、id定位 2、text定位 3…...
ChatGpt大模型入门
环境配置 创建虚拟环境 建议创建一个新的虚拟环境,避免安装依赖冲突, conda下载: https://docs.conda.io/en/latest/miniconda.html conda安装: https://zhuanlan.zhihu.com/p/591091259 或者使用venv 使用参考:http…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
MeanFlow:何凯明新作,单步去噪图像生成新SOTA
1.简介 这篇文章介绍了一种名为MeanFlow的新型生成模型框架,旨在通过单步生成过程高效地将先验分布转换为数据分布。文章的核心创新在于引入了平均速度的概念,这一概念的引入使得模型能够通过单次函数评估完成从先验分布到数据分布的转换,显…...
更新 Docker 容器中的某一个文件
🔄 如何更新 Docker 容器中的某一个文件 以下是几种在 Docker 中更新单个文件的常用方法,适用于不同场景。 ✅ 方法一:使用 docker cp 拷贝文件到容器中(最简单) 🧰 命令格式: docker cp <…...
