【Linux】手把手教你从零上手Vim编辑器

🦄个人主页:修修修也

🎏所属专栏:Linux

⚙️操作环境:Xshell (操作系统:CentOS 7.9 64位)


目录

📌写在前面

📌Vim是什么

📌手把手教你开始使用Vim

🎏使用Vim编辑第一个程序

🎏Normal(命令模式)指令集

🕹️插入模式

🕹️插入模式切换为命令模式

🕹️移动光标

🕹️删除文字

🕹️复制

🕹️替换

🕹️撤销上一次操作

🕹️更改

🎏LastLine(底行模式)指令集

🕹️显示行号

🕹️跳到文件中的某一行

🕹️查找字符

🕹️保存文件

🕹️离开Vim

📌多文件操作

📌简单配置Vim

🎏Vim配置原理

🎏一键配置Vim

结语


📌写在前面

        点进这篇博客的朋友想来大都是对Vim这个编辑器感到既好奇又迷茫的。首先要明确的是, Vim并不像我们以往接触的编辑器那样容易在一开始就可以简单的先尝试上手操作。相反地, 因为没有我们熟悉的图形化界面+鼠标辅助操作,Vim的起步难度可以说远超其他编辑器。如果你想要基本操作一下Vim,你一开始就需要先掌握一定的技能,而不是在使用时才蹒跚起步。下图大概描述了Vim的学习曲线:

        从坐标轴毫无反馈的走到y轴的起点的路程是令人绝望的, 很多人倒在这段路上。因为他们并不知道学习Vim第一要紧的事是存活下来。但当你越过这段路后,Vim将会成为你最后一个使用的文本编辑器。

        "没有比Vim更好的文本编辑器了, 非常地难学, 但是却不可思议地好用。"——陈皓

        在正式开始学习Vim之前, 我需要给你一些忠告:

  • 学习Vim在开始时是痛苦的, 因为你不得不推翻自己长时间以来在windows环境下养成的文本编辑习惯, 那种感觉就像我们第一次在Linux里复制时被要求使用Ctrl+insert那样。
  • 学习Vim需要时间, 需要持续不断的练习, 并且这种练习就像小学老师要求课后抄写的汉字一样的枯燥无聊, 只是为了强化肌肉记忆, 但必须坚持。
  • 不要期望能在几天内就将Vim练习的和其他编辑器一样高效, 事实上你将花费两周乃至以上的时间重塑你的编辑习惯, 唯有如此, 才能使Vim得心应手。

📌Vim是什么

        Vim是从 Vi 发展出来的一个文本编辑器代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。

        Vim的设计理念是命令的组合。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。同时Vim与很多快捷键设置和正则表达式类似,可以辅助记忆。并且Vim针对程序员做了优化。


📌手把手教你开始使用Vim

🎏使用Vim编辑第一个程序

        首先确保自己的机器安装了Vim, 然后我们在目录下先创建一个.c文件:

        然后我们使用Vim打开这个.c文件:

        打开后,我们可以看到这样一个界面:

        正常情况来讲,打开了编辑器我们就可以输入文本了,但是如果你尝试一下就会发现此时你按动键盘输入,大概率界面是没有什么反应的,这是因为此时刚进入Vim,它还处于Normal(命令模式),Vim有很多种模式,其中主要的三种模式的作用及其关系如下图:

        了解了三种模式,我们就明白了这时候要想输入文本内容,就要先按[ i ]键进入insert(插入模式)才可以,我们按下[ i ]键,可以发现此时底行提醒我们已经进入了insert模式:

        然后我们尝试输入一段C语言代码,可以看到,此时就可以正常输入了:

        在代码输入完成之后,我们此时想要保存并退出Vim编辑器就需要先从Insert(插入模式)回退到Normal(命令模式),回退的方法是, 按[ Esc ]键, 然后就会发现底部的insert消失了,表示我们已经回退到了Normal(命令模式):

        然后我们要从Normal(命令模式)进入LastLine(底行模式), 按下[ Shift + ; ]键, 我们可以看到此时底部出现了一个冒号, 表示我们已经进入了LastLine(底行模式):

        这个时候, 我们想要保存文本并退出Vim, 就给底行输入"wq",其中w表示保存文本,q表示退出Vim:

        输入wq后按下回车, 就成功保存并退出Vim了, 此时我们查看一下刚编辑的test.c文件, 就可以看到刚刚保存的内容了:

        然后我们就可以正常的编译运行或者其他的操作,都是完全可以的:


🎏Normal(命令模式)指令集

🕹️插入模式

  • 按「 i 」切换进入插入模式( insert mode ),按[ i ]进入插入模式是从光标当前位置开始输入文件;
  • 按「 a 」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
  • 按「 o 」进入插入模式后,是插入新的一行,从行首开始输入文字。

🕹️插入模式切换为命令模式

  • 按[ Esc ]键。

🕹️移动光标

        首先介绍一下,我们在打开Vim之后,界面上显示的这个绿色小方块就是光标,它在哪里我们就在编辑哪里:

        下面介绍几种操纵光标定位的方法(注,操纵光标需要在Normal(命令模式)下进行):

  • 按「 $ 」:移动到光标所在行的“行尾”
  • 按「^」:移动到光标所在行的“行首”
  • 按「w」:光标跳到下个字的开头
  • 按「e」:光标跳到下个字的字尾
  • 按「b」:光标回到上个字的开头
  • 按[ n ]+[ l ]:光标移到该行的第n个位置,如:5l,56l
  • 按[gg]:光标移动到文本开始行
  • 按[shift+g]:光标移动到文本末尾行
  • 按[ n ] + [ Shift + g ] :光标移动到文本第n行, 如:5G,45G
  • 按「ctrl」+「b」:屏幕往“后”移动一页
  • 按「ctrl」+「f」:屏幕往“前”移动一页
  • 按「ctrl」+「u」:屏幕往“后”移动半页
  • 按「ctrl」+「d」:屏幕往“前”移动半页
  • Vim可以直接用键盘上的光标来上下左右移动,但正规的Vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格:

🕹️删除文字

  • 「x」:每按一次,删除光标所在位置的一个字符
  •   [ n ]+[ x ]:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符
  • 「 Shift + x 」:大写的X,每按一次,删除光标所在位置的“前面”一个字符
  •   [ n ]  +「 Shift + x 」:例如,「20X」表示删除光标所在位置的“前面”20个字符
  • 「dd」:删除光标所在行
  •   [ n ]  +「dd」:从光标所在行开始删除n行,如[ 5dd ]表示从光标所在行开始删除5行

🕹️复制

  • 「yw」:将光标所在之处到字尾的字符复制到缓冲区中
  •   [ n ] +「yw」:复制n个字到缓冲区
  • 「yy」:复制光标所在行到缓冲区
  •   [ n ] +「yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字
  • 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能

🕹️替换

  • 「r」:替换光标所在处的字符
  •   [ Shift ] +「r」:大写的R, 替换光标所到之处的字符,直到按下「ESC」键为止

🕹️撤销上一次操作

  • 「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次撤销。
  • 「ctrl + r」: 撤销的恢复, 如果您误执行一个撤销,可以马上按下「ctrl + r」,回到上一个撤销前的操作。按多次「ctrl + r」可以执行多次恢复撤销。

🕹️更改

  • [ c ] + [ w ]:更改光标所在处的字到字尾处
  • [ c ] + [ n ] + [ w ]:例如,「c3w」表示更改3个字

🎏LastLine(底行模式)指令集

        在使用底行模式之前 ,请记住先按[ESC]键确定您已经处于正常模式, 再按「 Shift + ; 」, 即一个冒号, 即可进入底行模式。

🕹️显示行号

  • 「set nu」: 输入「set nu」后,会在文件中的每一行前面列出行号。

🕹️跳到文件中的某一行

  • 「n」:「n」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行

🕹️查找字符

  • [ / ] + [ 关键字 ] : 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
  • [ ? ] + [ 关键字 ] :先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止

🕹️保存文件

  • 「w」: 在冒号输入字母「w」就可以将文件保存起来

🕹️离开Vim

  • 「q」:按「q」就是退出,如果无法离开Vim,可以在「q」后跟一个「!」强制离开Vim
  • [ w ] + [ q ]:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件

📌多文件操作

        Vim可以打开一个不存在的文件, 我们使用Vim打开一个不存在的文件:

        可以成功打开:

        但它并不会真正帮我们创建,如果我们并不保存这个文件的话, 在退出Vim后就不会产生新创建的文件:

        我们在Vim里面底行模式,同样可以打开Vim文件(包括不存在的文件):

        然后就会弹出一个code.c的Vim窗口,此时我们就可以进行多文件编辑了:

        多文件编辑下,想切换文件编辑,按[ Ctrl ] + [ w ] + [ w ]


📌简单配置Vim

        相信此时经过一定的熟悉和接触, 或许你会觉得Vim还是有很多不趁手的地方, 比如没有自动缩进, 或者是没有语法提示, 或者是不适应默认的主题方案。这些问题都可以通过配置Vim来解决,我们可以根据自己的使用习惯来配置Vim, 使它变得更加好用一些。


🎏Vim配置原理

        Vim配置是靠用户家目录里的文件Vimrc来完成的(这也表明一个Vim的配置只对一个用户生效,不会相互影响), 但这个文件并不是系统自带的,而是需要我们自己创建:

        创建好后我们就可以打开它然后配置Vim了:

        例如, 我们给文件里面输入"set nu"然后保存:

        然后退出再重新打开Vim就会发现所有的Vim文件都会自带行号了:

        Vim还有很多可以配置的选项,大家感兴趣的话可以在网上自行搜索配置.


🎏一键配置Vim

        如果有朋友懒得去详细的搜索Vim的配置,这里给大家贴一个现成的方案,大家可以用它来一键配置Vim:Gitee : VimForCppicon-default.png?t=N7T8https://gitee.com/HGtz2222/VimForCpp        项目概况如下图,详情请点击链接查看:

       配置步骤,首先复制下面这行代码:

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

        然后打开命令行窗口, 在确保自己不是root用户的情况下, 将代码复制到窗口运行:

        输入自己的root账户密码,就可以开始安装了, 这时它会自动的帮助我们下载配置相关的插件, 并给我们安装配置好, 我们只需要耐心等待5.6分钟就可以了, 等到它提示我们安装完成后, 我们输入[ source ~/.bashrc ]后, 就可以使用配置好的Vim了:

        再打开Vim, 就可以使用已经配置好的Vim了:

        注意,配置好后用户的根目录里会多出一个install.sh文件,这是我们刚才在配置文件时下载的,我们将其隐藏掉就行:


结语

希望这篇关于 Vim编辑器使用 的博客能对大家有所帮助,欢迎大佬们留言或私信与我交流.

学海漫浩浩,我亦苦作舟!关注我,大家一起学习,一起进步!

相关文章推荐

【Linux】一文带你彻底搞懂权限

【Linux】基本指令(下)

【Linux】基本指令(中)

【Linux】基本指令(上)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ilya Sutskever 2023年伯克利大学演讲回顾:无监督学习与GPT的数学基础

引言 在2023年,OpenAI联合创始人之一的Ilya Sutskever在伯克利大学进行了一次极具影响力的演讲。这场演讲虽然内容复杂晦涩,但却被认为是人工智能发展历史上的一个重要里程碑。在演讲中,Sutskever深入探讨了无监督学习的数学依据&#xff0c…

CocoaPods 官宣进入维护模式,不在积极开发新功能,未来将是 Swift Package Manager 的时代

昨天 CocoaPods 官宣现在项目**处于维护模式 **,简单来说,就是 CocoaPods 不会再像以前一样积极投入资源进行开发,所谓维护模式,就是让项目处于「可用」的状态,而此时距离 CocoaPods 的出现,也过去了有 13 …

树莓派4 AV没有视频输出

使用AV接口输出,没有画面 需要在config.txt文件中 增加配置 enable_tvout1config.txt 中的 dtoverlayvc4-kms-v3d 行末尾添加,composite: dtoverlayvc4-kms-v3d,composite默认情况下,输出 NTSC 复合视频。要选择不同的模式,请在…

Bug定义及生命周期(七)

BUG 定义 软件的bug,软件程序的漏洞或缺陷 – 常见,首先发现 软件可改进的细节,或与需求文档存在差异的功能实现等 测试工程师:发现bug,定位bug,提交bug,回归bug 类型 确定bug类型&#xff…

【中国数据库前世今生】数据存储管理的起源与现代数据库发展启蒙

记录开启本篇的目的: 作为1名练习时长2年半的DBA,工作大部分时间都在和数据库打交道,包括Oracle,Mysql,Postgresql,Opengauss等国内外数据库。但是对数据库的发展史却知之甚少。 正好腾讯云开发者社区正在热播:【纪录片】中国数据库前世今生,借此机会了解…

【云备份】学习Json

文章目录 1.Json数据类型基础数据类型复合数据类型JSON数据类型的应用 2.学习jsoncpp库利用json实现序列化利用json实现反序列化 1.Json数据类型 json 是一种数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。json数据交换格式是将多种数据对象组织…

MATLAB中lsqr函数用法

目录 语法 说明 示例 线性系统的迭代解 使用指定了预条件子的 lsqr 提供初始估计值 使用函数句柄代替数值矩阵 lsqr函数的功能是求解线性系统 - 最小二乘法。 语法 x lsqr(A,b) x lsqr(A,b,tol) x lsqr(A,b,tol,maxit) x lsqr(A,b,tol,maxit,M) x lsqr(A,b,tol,m…

【Qt】QWidget的windowIcon属性

QWidget的windowIcon属性 windowIcon表示窗口的图标 当我们使用默认的windowIcon的时候,其窗口的图标如下: API说明 windowIcon() 获取到控件的窗⼝图标. 返回 QIcon 对象. setWindowIcon(const QIcon& icon) 设置控件的窗⼝图标. 在Qt中&…

【STM32 FreeRTOS】任务

使用 RTOS 的实时应用程序可以被构建为一组独立的任务。每个任务在自己的上下文中执行,不依赖于系统内的其他任务或 RTOS 调度器本身。在任何时间点,应用程序中只能执行一个任务,实时 RTOS 调度器负责决定所要执行的任务。因此, R…

react中使用nextjs框架,前端调后端接口跨域解决方式

前端在项目目录中next.config.js文件中添加以下代码 async rewrites() {return [{source: "/api/:path*",destination: ${process.env.NEXT_PUBLIC_API_DOMAIN}/api/:path*,basePath: false}]} 截图: source: "/api/:path*": 定义了一个 URL …

C++ 面试题常用总结 详解(满足c++ 岗位必备,不定时更新)

📚 本文主要总结了一些常见的C面试题,主要涉及到语法基础、STL标准库、内存相关、类相关和其他辅助技能,掌握这些内容,基本上就满足C的岗位技能(红色标记为重点内容),欢迎大家前来学习指正&…

【MySQL 03】库的操作 (带思维导图)

文章目录 🌈 一、创建数据库🌈 二、查看数据库🌈 三、使用数据库🌈 四、修改数据库🌈 五、删除数据库🌈 六、备份数据库🌈 七、恢复数据库🌈 八、字符集和校验规则⭐ 1. 查看系统默认…

HAProxy 效能飞跃先锋队

目录 一 负载均衡 1.1 四层负载 1.2 七层负载 1.3 四层负载和七层负载的区别 二 Haproxy简介 2.1 概念和内容 2.2 haproxy的基本配置信息 2.2.1 global 配置 2.2.2 proxies 配置 三 Haproxy的算法 3.1 静态算法 3.2 动态算法 3.3 其他算法 四 高级功能及配置 4.…

Mysql原理与调优-索引原理及使用

目录 1.绪论 2.索引原理 2.1 索引采用的数据结构 2.1.1 B树 1.什么是B树 2.B树的优缺点 2.1.2 B树 1.什么是B树 3.B树的优缺点 2.2.3 hash 2.2.4 总结 2.2 InnoDB数据存储结构(聚簇索引) 2.2.1 自底向上探寻索引 3.2.2 查询一条数据的完整流程 3.2.3 聚簇索引 2…

奥运科技观察:AI PC,如何成为当代体育精神的数字捍卫者?

作者 | 曾响铃 文 | 响铃说 数字孪生帮助体育馆建设、超高清直播……这届奥运会科技感拉满,几乎所有前沿技术都能在奥运的赛事运营中发现。 而AI大时代,AI如何帮助帮助奥运会顺利举办、如何帮助运动员拥有更好的表现,同样值得业界关注&…

haproxy最强攻略

1、负载均衡 负载均衡(Load Balance,简称 LB)是高并发、高可用系统必不可少的关键组件,目标是 尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。 负载均衡的主要作用如下: 高并发…

# Spring Cloud Alibaba Nacos_配置中心与服务发现(四)

Spring Cloud Alibaba Nacos_配置中心与服务发现(四) 一、Nacos 配置管理-集群部署 1、 把 nacos 应用程序包,复制3份,分别命名为 nacos1, nacos2, nacos3 分别在 conf 目录下,修改 application.properties 配置文件…

数据结构——循环队列

目录 循环队列的基本知识 循环队列的实现 定义 各个接口的实现 循环队列的基本知识 循环队列的定义 循环队列(Circular Queue)是一种使用固定大小的数组实现的队列,它将数组的首尾相连,形成环形,以充分利用空间并实…

Spring Boot的配置文件

目录 一、配置文件 1.properties为后缀的配置文件 1.1基本语法 1.2读取配置文件 1.3properties的优缺点 1.4加中文注释出现乱码 2.yml格式的配置文件 2.1基础语法 2.2读取配置文件 2.2.1对象存储到配置文件中 2.3yml的优缺点 2.4用不用加单引号或者双引号呢&#xf…

【C语言篇】编译和链接以及预处理介绍(上篇)

文章目录 前言翻译环境和运行环境翻译环境编译预处理(预编译)编译词法分析语法分析语义分析 汇编 链接 运行环境预处理(预编译)详解预定义符号#define定义常量#define定义宏带有副作用的宏参数宏替换的规则宏和函数的对比 写在最后…