【Linux精讲系列】——vim详解

作者主页

📚lovewold少个r博客主页

   ⚠️本文重点c++入门第一个程序和基本知识讲解

👉【C-C++入门系列专栏】博客文章专栏传送门

😄每日一言:宁静是一片强大而治愈的神奇海洋!

目录

目录

​作者主页

目录

前言

Linux编辑器vim的使用

vim的基本概念

vim的基本操作

进入vim编辑器

回到命令模式

进入插入模式

切换到末行模式

vim的正常模式命令集

vim正常模式命令集

插入模式

移动光标

删除文字

复制

替换

撤销上一次操作

更改

跳至到指定的行

vim末行模式命令集

vim的分屏模式

vim的额外配置

简单配置

vim for cpp 

支持环境

安装配置

卸载方法

命令模式 

总结


前言

首先我们要知道vim是什么?

        vi(Visual Editor)是由美国程序员比尔·乌尔曼(Bill Joy)于1976年开发的,最初是为了在Unix系统上进行文本编辑而创建的。它是一款基于模式编辑的文本编辑器,以其高效的键盘快捷键而闻名,可在终端环境下使用。vi 成为Unix系统中的标准文本编辑器,并且在大多数Unix和Linux系统上内置。

        vim(Vi IMproved):vim 由布莱姆·米特尔斯(Bram Moolenaar)于1991年开发,旨在改进 vi 的功能,并为用户提供更多的功能。vim 添加了许多新特性,如多级撤销、语法高亮、自动缩进、宏录制、拼写检查、插件支持等。vim 还提供了更多的定制选项,使用户能够根据自己的需求进行配置。vim 成为了 vi 的一个增强版本,但也保留了 vi 的基本编辑功能和键盘快捷键。

        vi 是老式的字处理器,功能齐全。而 vim 则可以说是基于vi上的程序开发者的一项很好用的工具。 连 vim 的官方网站 自己也说 vim 是一个程序开发工具而不是文字处理软件。当然了我们这里主要以vim作为讲解。

Linux编辑器vim的使用

vim的基本概念

vim常使用有三种模式:命令模式(Command mode),输入模式(Insert mode)、底线命令模式(Last line mode)

正常/普通/命令模式:

这种模式下主要是控制光标的移动,字符、字或行的删除,移动复制某区段的以及进入各种模式下的命令操作。

插入模式(insert mode)

在命令模式下按 i 进入插入模式。插入模式主要是对文本的修改操作,只有在插入模式(insert mode)下才能对文本进行插入操作。通过按【Esc】可以回到命令行模式。

末行模式:

在命令模式下按 shift + : 进入末行模式该模式主要是对文件的保存退出操作以及完成文本的一些功能性任务,比如查找字符串,列出行号等操作。

这些模式是最常用也是使用vim最频繁的三种模式,当然vim还具备很多模式我们不做过多讲解。

vim的强大在于他支持多模式的操作,我们不用去了解每一种模式,目前学习linux的vim主要核心还是抓住以上三个模式。

vim的基本操作

进入vim编辑器

vim 文件名

        vim+文件名默认进入命令模式即正常模式。打开所在目录下文件存在即会打开原有存在文件,打开不存在文件即会新建此文件名的文件。

回到命令模式

在任何模式下无脑Esc即可回到命令模式。

进入插入模式

在【命令模式】切换进入【插入模式】一般有三种方式可以进入

i, I进入输入模式(Insert mode):
i 为【从目前光标所在处输入】, I 为【在目前所在行的第一个非空格符处开始输入】。 
a, A进入输入模式(Insert mode):
a 为【从目前光标所在的下一个字符处开始输入】, A 为【从光标所在行的最后一个字符处开始输入】。
o, O进入输入模式(Insert mode):
这是英文字母 o 的大小写。o 为【在目前光标所在的下一行处输入新的一行】; O 为在目前光标所在处的上一行输入新的一行!

切换到末行模式

shift+:进入末行模式。在末行模式下可以实现对文件的保存退出,查找等操作。常用以下操作对文件的保存和写入退出。

:w保存当前文件
:wq保存并且退出vim
:q!不保存强制退出vim

        以上操作就可以基本上把vim用起来了,实现基本的文件编写保存,退出等操作。然而我们要知道的是,vim主要是以键盘的方式操作,也就意味着键盘能做到很多功能操作而不需要鼠标。事实上vim的出现比鼠标诞生更加早,那么我们现在能用鼠标实现对光标的移动,文本的选取,以及查询等功能按键的点击操作。而我们知道其实很多操作都是有快捷键的,从而实现用键盘对文本编辑的快速操作。我们接下来主要学习对vim的功能操作。

vim的正常模式命令集

vim正常模式命令集

插入模式

Vim 的插入模式是用来输入文本的模式,可以通过以下命令从正常模式切换到插入模式且完成一些操作:

  • i :在光标当前位置开始输入文本。

  • I :在当前行的行首开始输入文本。

  • a :在光标下一个位置开始输入文本。

  • A :在当前行的行尾开始输入文本。

  • o :在当前行的下方插入一个新行,并开始输入文本。

  • O :在当前行的上方插入一个新行,并开始输入文本。

  • s :删除当前光标所在处的字符,并开始输入文本。

  • S :删除当前行,并开始输入文本。

  • c :删除指定范围的文本,并开始输入文本。需要和动作命令配合,例如 cw 删除一个单词,c$ 删除到行尾,c3w 删除三个单词等。

在插入模式下,按 Esc 键可以返回正常模式。

移动光标

        要知道的是在vim中,我们还保留了一些历史的印记。老式的键盘上没有上下左右的方向键,在之前要完成对光标的操作是集成在键盘h,j,k,l中。分别控制光标左下上右移动一格,当然我们也可以用我们的方向键操作。

        这是vi的创作人使用的键盘布局,当时对于上下左右键并没有完全的标准,甚至很多键盘并不存在上下左右键,vi便设计了这种操作方式。这样的操作方式逐步遗留到vim以过渡前期使用vi的人。同时我们使用hjkl也能有一定的优势,我们的双手可以一直停留在主键盘上,而不需要单独切换到右手端的方向键,对于习惯了使用hjkl键位作为方向键的人在光标操作也会更加快捷。

  • 行内移动
    • 左移一个字符:h
    • 右移一个字符:l
    • 移动到下一个单词的开头:w
    • 移动到上一个单词的开头:b
    • 移动到当前单词的结尾:e
    • 移动到行首:0
    • 移动到行尾:$
  • 跨行移动
    • 下移一行:j
    • 上移一行:k
    • 移动到文件末尾:G
    • 移动到文件开头:gg
    • 移动到第n行:nG
    • 移动到屏幕顶部:H
    • 移动到屏幕中间:M
    • 移动到屏幕底部:L
    • 向前翻页:Ctrl+f
    • 向后翻页:Ctrl+b
    • 向前翻半页:Ctrl+u
    • 向后翻半页:Ctrl+d
  • 查找移动
    • 查找word并移动到第一个匹配处:/word
    • 移动到下一个匹配处:n
    • 移动到上一个匹配处:N
    • 查找光标所在单词并移动到第一个匹配处:*
    • 查找光标所在单词并移动到上一个匹配处:#
    • 查找匹配的括号并移动到对应位置:%

删除文字

  • 删除文字
    • 每按一次删除光标所在位置的一个字符:x
    • 指定删除所在位置后面(包括自己在内的)#个字符 : #x
    • 大写的X,每按一次可以删除光标所在位置前面的一个字符:X
    • #X表示删除光标所在的位置前面的#个字符:#X
    • 删除光标所在行:dd
    • 从光标所在位置,向后面删除#行:#dd

复制

  • 将光标所在之处到字尾的字符复制到缓冲区:yw
  • 复制#个字符到缓冲区:#yw
  • 复制光标所在行到缓冲区:yy
  • 拷贝从光标所在行往下数#行文字:#yy
  • 粘贴缓冲区内容到光标所在行:p

替换

  • 替换光标所在位置的字符:r
  • 替换光标所在之处的字符,知道按下ESC键停止:R

撤销上一次操作

  • 如果您误执行一个命令,可以马上按下u撤销上一个操作,多次按u可以多次撤销:u
  • 撤销的恢复,对于错误撤销可以执行对撤销操作的撤销:crtl+r

更改

  • 更改光标所在处的字到字尾处:cw
  • 表示可以更改光标所在位往后的#个字符:c#w

跳至到指定的行

  • 列举处光标所在行的行号:crtl+g
  • 移动光标至文章的第#行的行首:#G

vim末行模式命令集

首先在命令模式下shift+:进入末行模式。

  • 保存文件:w
  • 退出 Vim 编辑器:q
  • 保存文件并退出 Vim 编辑器:wq
  • 强制退出 Vim 编辑器,不保存修改:q!
  • 显示行号:set nu
  • 隐藏行号:set nonu
  • 向下搜索 word 这个字符串:/word
  • 向上搜索 word 这个字符串:?word
  • 重复上一次的搜索 :n
  • 替换当前行第一个 old 为 new :s/old/new
  • 替换当前行所有的 old 为 new :s/old/new/g
  • 替换整个文件中所有的 old 为 new :%s/old/new/g

vim的分屏模式

分屏命令

sp:水平分屏

vsp:垂直分屏

ctrl+ww:多屏之间切换

qall:退出所有屏,以此内推有:wall、wqall

vim -o aa.txt bb.txt:进入的时候就进行分屏(o水平;O垂直)

vim的额外配置

        我们确实知道了用键盘就可以实现对文本的各种操作,但是使用起来还是不舒服,相比于vs还有很多编辑器来说,他的使用相当麻烦。无法自动缩进,自动补全,用起来得一个字一个字的打,这还不如用word,至少还有个括号匹配。所以这一小节我们就讲一讲如何实现自主配置vim,完成高级的编译环境搭建。

简单配置

        我们首先要理解的是如何更改配置文件。在目录/etc/下有一个名为virmrc的文件,这是系统公共的vim配置文件,对于所有用户都生效,而我们配置vim文件最好是在自己的普通用户下建立配置文件。

        在每一个用户的主目录底下,都可以创建自己私有的配置文件,命名为".vimrc"。通常情况下会存在一个这样的文件,如果没有自行配置即可。

首先进入用户主目录,用vim打开".vimrc"文件

        在这个文件下我们可以通过添加配置选项来配置vim运行环境。这里我们就不赘诉可以执行那些指令来改变操作环境,我们直接使用插件或者别人已经配置好的文件进行修改。

vim for cpp 

        这里我们学习使用一键化配置的方式。主要目标是帮助对vim配置方法不熟悉的新手封装的一键式vim环境安装包. 主要针对终端vim用户, 适合远程ssh连接Linux服务器进行开发的场景(例如使用阿里云服务器或者腾讯云服务器等)。

项目原地址:VimForCpp: 快速将vim打造成c++ IDE

支持环境

目前只支持 Centos7 x86_64.

安装配置

在 shell 中执行指令(想在哪个用户下让vim配置生效, 就在哪个用户下执行这个指令. 强烈 "不推荐" 直接在 root 下执行):

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

卸载方法

在安装了 VimForCpp 的用户下执行:

bash ~/.VimForCpp/uninstall.sh

命令模式 

        此项目主要对cpp环境进行适配,能实现代码高亮,代码补全自动缩进等操作。具体可以看项目操作文档。

总结

        本章主要讲解了vim的常见操作,vim编辑器强大且在linux开发环境下极为重要,掌握vim是学习linux系统中极为重要的一环。相信大家都能快速掌握。


    作者水平有限,如有错误欢迎指正!


    

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

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

相关文章

Django(二、静态文件的配置、链接数据库MySQL)

文章目录 一、静态文件及相关配置1.以登录功能为例2.静态文件3.资源访问4.静态文件资源访问如何解决? 二、静态文件相关配置1. 如何配置静态文件配置?2.接口前缀3. 接口前缀动态匹配4. form表单请求方法补充form表单要注意的点 三、request对象方法reque…

11、云服务器的宝塔面板安装、在宝塔安装MySQL、Redis、NGINX、JAVA

1►云服务器的宝塔面板安装 如果购买云服务器的时候,选择系统为宝塔面板,那么就不需要麻烦了。宝塔已经装好了。 但是如果没有选择宝塔面板,就需要手动安装。 第一步:点击重装系统 第二步:选择宝塔面板 宝塔面板官方…

如何写一篇吊炸天的竞品分析

这段时间,除了撩妹之外,最多的就是竞品分析了。最近很多临近毕业的同学也在四处应聘产品岗,而一份不错的竞品分析一定能为你的求职加分不少。于是,有着菩萨心肠天使面孔魔鬼身材的我,就来教大家怎么做一份完整的竞品分…

MySQL的表格去重,史上最简便的算法,一看就会

首先,表格my_tab02存在很多重复的数据: #表格的去重 方法一: 详细内容传送门:表格的去重 -- 思路: -- 1.先创建一张临时表 my_tmp,该表的结构和my_tab02一样 -- 2.把my_tmp的记录通过distinct关键字 处理后 把记录复…

『 MySQL数据库 』数据库基础之库的基本操作

文章目录 库的操作创建数据库字符集与校验集那么该如何查看当前数据库默认的字符集与校验规则?查看数据库所支持的字符集与校验集不同字符集(校验集)之间的区别 基本操作查看数据库显式数据库创建语句数据库的修改数据库的删除数据库的备份检查连接 库的操作 创建数据库 CRE…

APISpace IP归属地查询接口案例代码

1.IP归属地查询API 1.1 API接口简介 IP归属地查询API:根据IP地址查询归属地信息,包含国家、省、市、区县和运营商等信息。APISpace 提供了IPv4 和 IPv6 的IP归属地查询接口,并且包含了各种归属地精度查询的接口。 1.2 IPv4 IPv4归属地查询…

51单片机+SIM800C(GSM模块)实现短信发送功能

一、前言 本项目利用51单片机和SIM800C GSM模块实现短信发送功能。短信作为一种广泛应用的通信方式,在许多领域具有重要的作用,如物联网、安防系统、远程监控等。通过将51单片机与SIM800C GSM模块相结合,可以实现在各种应用场景下的短信通信…

IDEA 设置 Git 在左侧展示

File->settings->Version Control->commit 勾选 Use non-model commit interface

vue.js实现科室无限层选中和回显

一、效果展示&#xff1a; 展示可选层级 查看选中的值 二、实现&#xff1a; <el-form-item label"相关科室:" prop"orgId"><el-cascaderpopper-class"cascader-my":options"orgOptions":show-all-levels"false"…

【ARM Trace32(劳特巴赫) 使用介绍 2 - Veloce 环境中使用trace32 连接 Cortex-M33】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 T32MARM 介绍Trace32 .t32 和 .cmm 差异veloce 下启动TRACE321.1.3 TAP 状态机操作命令1.1.3.1 IDCODE&#xff08;Identification Code&#xff09;寄存器 介绍 T32MARM 介绍 T32MARM 是 Lauterbach 的 Trace32 …

Android ConstraintLayout

0dp 充满约束 to左侧是控件本身,to右边是约束条件 例如: app:layout_constraintBottom_toBottomOf"id/image_1" app:layout_constraintTop_toBottomOf"id/image_1" 指定权重: app:layout_constraintHorizontal_weight"" app:layout_constra…

调试 Mahony 滤波算法的思考 10

调试 Mahony 滤波算法的思考 1. 说在前面的2.Mahony滤波算法的核心思想3. 易懂的理解 Mahony 滤波算法的过程4. 其他的一些思考5. 民间 9轴评估板 1. 说在前面的 之前调试基于QMI8658 6轴姿态解算的时候&#xff0c;我对Mahony滤波的认识还比较浅薄。初次的学习和代码的移植让…

电路布线问题动态规划详解(做题思路)

对于电路布线问题&#xff0c;想必学过动态规划的大家都很清除。今天就来讲解一下这个动态规划经典题目。 目录 问题描述输入分析最优子结构代码 问题描述 在一块电路板的上、下2端分别有n个接线柱。根据电路设计&#xff0c;要求用导 线(i,π(i))将上端接线柱与下端接线柱相…

与set和map相关的OJ题练习

一、两个数组的交集 题目链接&#xff1a; 349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给两个数组&#xff0c;求在数组里面共同出现的部分&#xff0c;就是求两个数组的交集&#xff0c;返回顺序不做要求 解题思路&#xff1a; …

技术分享 | web自动化测试-PageObject 设计模式

为 UI 页面写测试用例时&#xff08;比如 web 页面&#xff0c;移动端页面&#xff09;&#xff0c;测试用例会存在大量元素和操作细节。当 UI 变化时&#xff0c;测试用例也要跟着变化&#xff0c; PageObject 很好的解决了这个问题。 使用 UI 自动化测试工具时&#xff08;包…

ppt聚光灯效果

1.放入三张图片内容或其他 2.全选复制成图片 3.设置黑色矩形&#xff0c;透明度30% 4.粘贴复制后的图片&#xff0c;制定图层 5.插入椭圆&#xff0c;先选中矩形&#xff0c;再选中椭圆&#xff0c;点击绘图工具&#xff0c;选择相交即可&#xff08;关键&#xff09;

Spring Boot 请求/actuator/beans 无法访问 返回404

问题复现 在保证项目加入了spring-boot-starter-actuator依赖&#xff0c;并成功启动后。通过浏览器进行访问&#xff0c;返回如下图结果&#xff1a; 问题排查 1. 查看日志 从日志中可以看到基于路径’/actuator’下只暴露了一个端点 2. 访问http://localhost:8080/actua…

C# OpenCvSharp 环形文字处理 直角坐标与极坐标转换

效果1 效果2 项目 代码 using OpenCvSharp; using System; using System.Drawing; using System.Text; using System.Windows.Forms;namespace OpenCvSharp_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string fileFilter "*.*…

1. Collection,List, Map, Queue

1. java集合框架体系结构图 2. Collection派生的子接口 其中最重要的子接口是&#xff1a; 1&#xff09;List 表示有序可重复列表&#xff0c;重要的实现类有&#xff1a;ArrayList, LinkedList ArrayList特点&#xff1a;底层数组实现&#xff0c;随机查找快&#xff0c;增删…

facebook分享-错误记录

无法拉起分享 "code":30000,"msg":"fail:API_ERROR: API_ERROR" 1.确认facebook的app_id是否一致 2.确认是否在app_id应用的白名单里&#xff0c;注册meta开发者&#xff0c;然后把主页的user_id给管理员加 A ContentProvider for this app was…