如何熟练使用vim工具?
🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨
🐻推荐专栏1: 🍔🍟🌯C语言初阶
🐻推荐专栏2: 🍔🍟🌯C语言进阶
🔑个人信条: 🌵知行合一
🍉本篇简介:>:讲解C++中的函数重载、引用、auto关键字、内联函数等.
金句分享:
✨生活本就沉默,但是跑起来有风!✨
前言
文末有彩蛋哦!
Vim
是一款文本编辑器,是从Unix
中的vi
编辑器(visual editor)发展而来的。Vim
可以在多种操作系统上运行,包括Unix、Linux、macOS
和Windows
等。Vim主要用于编辑纯文本文件,支持语法高亮、多窗口编辑、标签页、插件等功能。对于程序员来说,Vim
是一个非常强大的编辑器,可以提高编码效率。
目录
- 前言
- 一、vim的使用
- (1) 模式介绍
- (2) 打开vim
- (3) 光标操作(在命令模式下)
- 🍔上下左右移动
- 🌰按单词左右移动
- 🍭行首行尾
- 🍉文章开头和结尾
- 🔑按页和其他
- (4) 删除
- (5) 复制
- (6) 替换
- (7) 撤销与恢复:
- 二、底行模式
- 列出行号(底行模式下)
- 跳转指定行(底行模式下)
- 查找字符(串)
- 保存文件(并退出)
- 三、配置vim
一、vim的使用
(1) 模式介绍
Vim
有不同的模式,每个模式都具有不同的功能和操作方式。下面是Vim
的几种常见模式的介绍:
-
命令模式(Command Mode):这是
Vim
的默认模式,用户可以在该模式下输入命令来执行各种编辑操作, -
插入模式(Insert Mode):在插入模式下,用户可以像在其他编辑器中一样直接输入文本。只有在
Insert mode
下,才可以做文字输入,该模式是我们用的最频繁的编辑模式。
(1) 按"i
"键即可进入插入模式
(2) 按下"Esc
"键可退出插入模式返回命令模式。 -
替换模式(Replace Mode):替换模式允许用户替换已有的文本。
(1)按shift+r
键即可进入替换模式,在该模式下,用户输入的字符将直接替换光标当前位置的字符.
(2)按"Esc
"键退出替换模式。 -
底行模式(Command-line Mode):底行模式允许用户执行一些高级的编辑和搜索操作。
(1)按shift+;
键即可进入底行模式,用户可以在该模式下输入各种命令,文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作等。
(2) 按"Esc
"键退出到命名模式.
这些模式的切换可以通过按下相应的快捷键来完成。Vim
的模式使得用户可以灵活地进行文本编辑,提高编辑效率。熟练掌握这些模式及其相关操作是使用Vim
的关键。
(2) 打开vim
一般情况下,vim
都是自带的一款软件.
情况1 :
vim
+文件名
(文件未被创建)
底行模式按q
:文件依旧没有被创建,退出vim
.
底行模式按wq
:文件被创建,并退出.
情况2:
vim
+文件名
(文件已被创建)
示例:打开vim
下图是进入vim
以后的界面:
输入:i
进入插入模式.
如果想退出,按Esc
到命令模式,再shift+;
到底行模式,输入wq
(保存并退出).
(3) 光标操作(在命令模式下)
🍔上下左右移动
vim
可以直接用键盘上的光标来上下左右移动,但正规的vim
是用小写英文字母「h
」、「j
」、「k
」、「l
」,分别控制光标左、下、上、右移一格
为啥是这四个键代表上下左右而不用光标键 ↑
↓
←
→
.
因为,早期的键盘是没有光标键的。
🌰按单词左右移动
按键「w
」:光标跳到下个单词的开头.
按「e
」:光标跳到这个词的结尾.
按「b
」:光标回到单词的开头.
🍭行首行尾
「 $
」:移动到光标所在行的“行尾”
「^
」:移动到光标所在行的“行首”
🍉文章开头和结尾
[gg
]:进入到文本开始
[shift+g
]:进入文本末端
跳至指定的行
「ctrl
」+「g
」列出光标所在行的行号。(底行模式下可以使用set nu
列出行号)
「nG
」:表示移动光标至文章的n行行首。
🔑按页和其他
「ctrl
」+「b
」:屏幕往“后”移动一页
「ctrl
」+「f
」:屏幕往“前”移动一页
「ctrl
」+「u
」:屏幕往“后”移动半页
「ctrl
」+「d
」:屏幕往“前"移动半页
「n+l
」:光标移到该行的第n
个位置,12l
,移动到改行的12
位置处.
(4) 删除
「x
」(小写):,删除光标所在位置的一个字符.
「nx
」:表示删除从光标所在位置开始往后n
个字符.(包括光标所在字符).
「X
」(大写):删除光标所在位置的“前面”一个字符.
「nX
」:表示删除从光标所在位置开始的往前n个字符.(包括光标所在字符).
「dd
」:删除一行,删除光标所在行.
「ndd
」:从光标所在行开始删除n行.
(5) 复制
复制:
「yw
」:复制从光标处开始到单词的结尾的字符到缓存区.
「nyw
」:复制n
个字到缓冲区
「yy
」:复制光标所在行到缓冲区。
「nyy
」:表示拷贝从光标所在的该行往后n
行数据.
粘贴:
「p
」:将缓冲区内的字符贴到光标所在位置。
注意:所有与“y
”有关的复制命令都必须与“p
”配合才能完成复制与粘贴功能。
(6) 替换
「r
」:替换光标所在处的字符
进入替换模式,直接全部变成替换操作.
「R
」:替换光标所到之处的字符,直到按下「ESC
」键为止。
(7) 撤销与恢复:
「u
」:撤销上一次操作可以按u
键.
「ctrl + r
」: 恢复:撤销撤销操作.
二、底行模式
先按ESC
键回退到命令行模式,再使用shift+:
进入底行模式.
列出行号(底行模式下)
「set nu
」:会在文件中的每一行前面列出行号。
列出行号前:
列出行号后:
添加行号:
set nu
取消行号:
set nonu
跳转指定行(底行模式下)
「n
」: 表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了.
再回车,就会跳到第5行。
查找字符(串)
「/+查找字符(串)」:
示例:查找linux
指令:/linux
配合n
进行搜索下一个符合条件的语句.

「?
+要查找的字符(串)」:
同样按n
可以查找下一处符合条件的语句.
那/
和 ?
查找有和区别?
/
:默认是往下(后)搜索.,按n
是往下(后)的下一处符合条件的语句.
?
:默认是往上(前)搜索.,按n
是往下(后)的下一处符合条件的语句.
保存文件(并退出)
保存:
「w
」: 将文件保存起来
退出vim
:
「q」:退出vim
强制退出:有的时候某些文件不让修改后退出,可以使用q!
进行强制退出.
通常我们w
和q
配合使用,即输入wq
指令进行保存并退出.
小知识:
可以在底行模式中执行外部的命令.编译啊等等,而不退出vim
.
示例:如果想要使用ls
命令.
- 在
Vim
编辑器中,按下冒号键(:)进入底行模式。 - 输入
!
后面跟着你想要执行的外部指令。示例如果你要执行ls
命令来列出当前目录的文件,可以输入!ls
。 - 按下回车键,
Vim
将会执行该外部指令并在底行显示输出结果。
三、配置vim
我们不难发现,相较于我们之前使用的VS
,vim
的使用极其不方便,没有语法提醒,也没有括号自动补齐等等功能.这就很难受了,我可适应不了.
为了能够方便我们更加方便的使用vim
进行代码的编写,我们可以去配置vim,使其更加符合我们的需求.
在目录 /etc/
下面,有个名为vimrc
的文件,这是系统中公共的vim
配置文件,对所有用户都有效。
配置自己用户的专属vim
在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc
”。
我们进入自己的家目录:
方法1:
cd ~
方法2:
cd /home/cjn
创建vim的配置文件:touch .vimrc
使用vim
对.vimrc
文件进行编写:vim .vimrc
下面是示例的一些配置:
配置成功后,保存并退出vim
,后续再使用vim
就会生效了.
其实上面的配置还是很挫的,毕竟配置这么点东西可不够,没有语法报错,自动补齐括号等等.
但是我们并不擅长去配置vim
,所以我这里有一套已经配置好的vim
,欢迎大家私信找我免费获取哦!
展示:
好了,本篇的内容就讲到这里了.
相关文章:

如何熟练使用vim工具?
🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 …...

ClassNotFoundException: org.apache.hive.spark.client.Job
hive使用的是3.13版本,spark是3.3.3支持hadoop3.x hive将engine从mr改成spark,通过beeline执行insert、delete时一直报错,sparkTask rpc关闭, 查看yarn是出现ClassNotFoundException: org.apache.hive.spark.client.Job。 开始…...

《合成孔径雷达成像算法与实现》_使用CS算法对RADARSAT-1数据进行成像
CSA 简介:Chirp Scaling 算法 (简称 CS 算法,即 CSA) 避免了 RCMC 中的插值操作。该算法基于 Scaling 原理,通过对 chirp 信号进行频率调制,实现了对信号的尺度变换或平移。基于这种原理,可以通过相位相乘代替时域插值…...

GCN01——Ubuntu中设置vivado编辑器为vscode
确定vscode位置 在命令行中输入 which code得到文件地址 进入文件夹后可看到,这是个链接文件,不过无所谓,就用这个地址就行 设置Text Editor 打开setting选择右侧text editor 这里说明了如何进行设置 将自己的地址加进去就行 /usr/share…...

Android 11.0 软硬键盘同时使用的兼容(软键盘与内置物理键盘共存)
1.概述 在11.0的系统rom产品定制化开发总,在有些设备上,如果外接了USB扫描枪之类的设备,当插入USB扫描枪以后,然后点击输入调用输入法的时候,没有反应,但是拔掉USB扫描枪以后,输入法又能正常使用,这说明和输入法起冲突了,询问了好多同时,说可能把会把USB扫描枪识别为…...

ARM安全架构——为复杂软件提供保护
目录 一、概述 二、栈溢出和执行权限 三、面向返回的编程ROP 四、面向跳转的编程(JOP) 五、将这些技术应用于实际代码 七、检查你的知识...

提升网页交互体验的秘密武器——防抖和节流
说在前面 在现代Web开发中,提高网页性能是至关重要的。本文介绍了防抖和节流这两种常用的性能优化技术,通过控制函数的执行频率,有效减少不必要的计算和网络请求,从而提升用户体验和页面加载速度。 函数节流 节流是指限制一个函数…...

HX3002入耳检测光感驱动调试-感0x08 寄存器溢出,不变化错误问题解决方法
是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, 读取光感0x08 寄存器溢出,不变化错误问题?原因 原因:没有读取到0x08数据,没有读0x…...

目标检测开源数据
KITTI KITTI数据集下载(百度云)_kitti数据集百度云-CSDN博客 KITTI数据集下载及解析_kitti bin文件标签-CSDN博客 KITTI 3D目标检测数据集解析(完整版)_kitti数据集结构-CSDN博客 KITTI数据集简介与使用_kitti数据见一个视频多…...

AI模特换装的前端实现
本文作者为 360 奇舞团前端开发工程师 随着AI的火热发展,涌现了一些AI模特换装的前端工具(比如weshop网站),他们是怎么实现的呢?使用了什么技术呢?下文我们就来探索一下其实现原理。 总体的实现流程如下&am…...

git-5
1.GitHub为什么会火? 2.GitHub都有哪些核心功能? 3.怎么快速淘到感兴趣的开源项目 github上面开源项目非常多,为了我们高效率的找到我们想要的资源 根据时间 不进行登录,是没有办法享受到高级搜索中的代码功能的,登录…...

qt 5.15.2压缩和解压缩功能
qt 5.15.2压缩和解压缩功能 主要是添加qt项目文件.pro内容: 这里要先下载quazip的c项目先编译后引入到本项目中/zip目录下 INCLUDEPATH ./zip CONFIG(debug, debug|release) {win32:win32-g: PRE_TARGETDEPS $$PWD/zip/libquazipd.awin32:win32-g: LIBS -L$$PWD…...

thinkphp6出现 htmlentities() expects parameter 1 to be string, array given
为避免出现 XSS 安全问题, thinkphp6默认变量输出都会使用 htmlentities 方法进行转义 输出。 如果不想被转义输出,模板渲染时,需要在变量后面加上 raw方法,如:{$data|raw} 1、出现问题前的代码 PHP代码$this->assi…...

【android开发-03】android中Intent的用法介绍
1,Intent的作用 在Android开发中,Intent的使用非常广泛,包括启动Activity、启动Service、发送广播等。是各组件间交互的一种重要方式,他不仅可以指明当前组件想要执行的动作,还可以在不同组件间传递数据。 Intent可以…...

Java中时间工具详解:java.time包的应用
引言 时间在软件开发中是一个至关重要的概念,而Java自从引入java.time包后,提供了更加强大和灵活的时间处理工具。本文将深入介绍java.time包中的一些常用时间工具,帮助你更好地处理日期和时间的操作。 1. LocalDate - 处理日期 LocalDate…...

mysql 日志分析
程序启动标志 可以直接全局搜索,查看启动了几次 可以看到总共11次,当前是第2次 如何判断mysql是正常关闭,手动启动的 下图中启动之前出现 Shutdown complete打印说明启动之前是正常关闭的...

网络运维与网络安全 学习笔记2023.11.30
网络运维与网络安全 学习笔记 第三十一天 今日目标 实现AP自动注册、配置WLAN业务参数、无线终端通过wifi互访 实现AP自动注册 项目背景 企业内网的大量AP已经通过DHCP的方式获得IP地址 为了实现后期大量AP的统一管理,希望通过AC实现集中控制 在AC设备上&#…...

Perplexity 推出全新大型在线语言模型
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

python中的函数定义
默认参数 注: 在Python中,print(x, and y both correct)是一条打印语句(print statement),用于将一条消息输出到控制台或终端。它的作用是将变量x的值和字符串and y both correct同时输出到屏幕上。 在这个语句中&…...

信贷销售经理简历模板
这份简历内容,以信贷销售经理招聘需求为背景,我们制作了1份全面、专业且具有参考价值的简历案例,大家可以灵活借鉴。 信贷销售经理简历模板在线编辑下载:百度幻主简历 求职意向 求职类型:全职 意向岗位ÿ…...

js事件流与事件委托/事件代理
1 事件流 事件流分为两步,一是捕获,二是冒泡 1.1 捕获概念 捕获就是从最高层一层一层往下找到最内部的节点 1.2 冒泡概念 捕获到最小节点后,一层一层往上返回,像是气泡从最底部往上冒一样,由于水深不同压强不同&…...

代码随想录算法训练营第三十八天| 509 斐波那契数 70 爬楼梯 746 使用最小花费爬楼梯
509 斐波那契数 class Solution {public int fib(int n) {int f[] new int[n 5];f[0] 0;f[1] 1;for(int i 2;i < n;i){f[i] f[i - 1] f[i - 2];}return f[n];} } 时间复杂度O(n) 空间复杂度O(n) 70 爬楼梯 class Solution {public int climbStairs(i…...

windows 此系统禁止运行脚本报错处理
windows 此系统禁止运行脚本报错处理 start 在命令行中运行执行的脚本,运行原理可以参考文章 《》本文主要介绍,如何处理window默认的对脚本运行的限制。 详细说明 出现报错如下: 主要原因就是系统默认禁止了在 powershell 环境下某些脚…...

西南科技大学数字电子技术实验一(数字信号基本参数与逻辑门电路功能测试及FPGA 实现)FPGA部分
一、 实验目的 1、掌握基于 Verilog 语言的 diamond 工具设计全流程。 2、熟悉、应用 Verilog HDL 描述数字电路。 3、掌握 Verilog HDL 的组合和时序逻辑电路的设计方法。 4、掌握“小脚丫”开发板的使用方法。 二、 实验原理 与门逻辑表达式:Y=AB 原理仿真图: 2 输入…...

List系列集合
List系列集合特点:有序,可重复,有索引 ArrayList:有序,可重复,有索引 LinkedList:有序,可重复,有索引 (底层实现不同!适合的场景不同!…...

SQL 金额数值转换成中文大写
需求:将金额转换成中文大写格式填入单据合计行: _佰_拾_万_仟_佰_拾_元_角_分 1234567.89 壹佰贰拾叁万肆仟伍佰陆拾柒元捌角玖分 1.函数转换 drop function n2C;CREATE FUNCTION n2C (num numeric(14,2)) RETURNS VARCHAR(20) AS BEGIN …...

在Linux上安装KVM虚拟机
一、搭建KVM环境 KVM(Kernel-based Virtual Machine)是一个基于内核的系统虚拟化模块,从Linux内核版本2.6.20开始,各大Linux发行版就已经将其集成于发行版中。KVM与Xen等虚拟化相比,需要硬件支持的完全虚拟化。KVM由内…...

软件设计之原型模式
原型模式是从一个对象再创建另一个可定制的对象,而且不需要知道任何创建的细节。拷贝分浅拷贝和深拷贝。浅拷贝无法拷贝引用对象。在面试的时候,我们会投多家公司,根据岗位的不同我们会适当调整。使用原型模式可以快速达到需求,下…...

Android之高级UI
系统ViewGroup原理解析 常见的布局容器: FrameLayout, LinearLayout,RelativeLayoout,GridLayout 后起之秀:ConstraintLayout,CoordinateLayout Linearlayout Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {if (mOrientation …...

Qt:解决跨线程调用socket/IO类,导致报错的问题
Qt有很多IO相关的类,比如说QTcpSocket、QFile,总的来说,在Qt的框架内使用,还是非常方便的。 但是用过其他框架IO类的人,可能有一个很不习惯,就是Qt的所有IO类,都不推荐或者不可以跨线程操作&…...