【Linux】vim文本编辑器的使用

news2024/11/27 16:45:01

目录

一、为什么要学vim

1.原因

2.简单介绍

3.准备工作

二、vim最小集

1.各模式功能

2.编写代码示例

三、vim指令集

1.命令模式

1.1光标移动

1.2复制(剪切)粘贴

1.3 撤销

1.4 替换 / 删除/大小写切换

2.底行模式

2.1本文件内操作

2.2文件之间操作

3.插入模式

四、vim配置

1.手动配置

2.自动化配置

五、注意事项


一、为什么要学vim

1.原因

        一般情况下,使用VScode进行本地和远端联合开发即可,那么我们学习Linux里面的编辑器vim的意义何在呢?其实,在面对一些极端情况下,使用vim是必须的,比如软件运行起来了,但是此时发现了一些问题,这些问题可能是配置文件的问题,如果不懂vim,就无法在Linux下立即修改,还要下载一个Vscode链接好再修改,过于麻烦。另一个使用vim的原因就是为了满足常规开发

2.简单介绍

        vim有一个前身叫vi,vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作,不仅可以在终端运行,也可以运行于x window、 mac os、windows。

        vim是多模式编辑器,编辑器不难理解,只是编写代码,不提供编译链接生成可执行文件的操作,就和在记事本里面写代码差不多。但是多模式又是指的什么,vim有很多种模式,但是常用的只有三到五种,比如命令模式、插入模式、底行模式、替换模式、视图模式等等。下面将详细讲解vim的使用。

3.准备工作

        “工欲善其事,必先利其器”要学习vim,首先要确保Linux环境下安装了vim。输入下列命令后回车,如果出现下图显示的样子,就是Linux已经安装了vim编辑器,就不用我们自己安装。

vim test.c

        确认安装之后,首先按住键盘上的 shift冒号,底部会跳出一行,可以输入,输入q就可以退出。如下:

        如果输入vim test.c 没有出现上述内容,那就是还未安装,就需要手动安装vim。在root账户下,输入下列命令,就可以安装vim。当然安装完也可以使用上面的方法测试一下。

yum install -y vim

二、vim最小集

1.各模式功能

  • 正常/普通/命令模式(Normal mode)
        控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode
  • 插入模式(Insert mode)
        只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
  • 底行模式(last line mode)
        文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下, shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入 help vim-modes

        这三种模式不是任意切换的。任何模式都需要通过命令模式来切换。假设现在处于插入模式,但是我想要切换到底行模式,这是不可以直接切换的,要先进入命令模式,才可以切换到底行模式。

2.编写代码示例

        来个简单例子:

        1.如下,直接键入 vim test.c 。如果当前目录下有这个文件,它就会打开,如果没有,就会自动创建。

         2.直接进入如下界面,这是vim的命令模式。此时是无法对文本进行编辑的。所以想要写代码,需要进入插入模式。

        3.按一下键盘上的字母 i 键,就可以进入插入模式,如下红色圆圈里的内容,明显看到变成了 “INSERT” 这就代表插入模式,此时可以进行代码的编写。

        4.编写一个最简单的C语言代码。如下,看到左下方,编写完依旧是插入模式。

        5.此时我写好了代码,想要退出,但是退出需要进入底行模式才可以。所以,我要先回到命令模式,再由命令模式进入底行模式。按一下键盘上的 Esc 即可从插入模式回到命令模式。如下图,看左下角,明显已经没有了“INSERT”,现在就是命令模式。

        6.从命令模式进入插入模式,需要同时按住 shift : 才可以(shift键和冒号键)。如下,左下角出现了一个冒号和绿色光标,说明进入了底行模式,此时可以输入一些命令。

        输入 wq 回车 ,就可以退出vim。其中 w表示保存文件q表示退出文件,因为我们对文件进行了修改,所以肯定要保存。然后使用 cat 指令查看test.c 这个文件,如下图,可以看到刚才的代码编写成功。

        上面的内容就是使用vim创建/打开一个文件,并进行编写代码,保存退出的过程。可以使用下图简单地概括各个模式的进入和退出。同时也有几个注意事项

1.如果不知道自己在什么模式下面,无脑 Esc
2.编写完代码,一般需要保存再退出

三、vim指令集

1.命令模式

        注意,这里所讲解的一切指令,都需要在命令模式之下,否则不成立。如果不确定自己是不是再命令模式下,无脑 Esc 就会退回到命令模式。

1.1光标移动

        光标移动大部分情况下需要行号显示,所以可以先看下面的底行模式第一个指令,显示行号。

指令

作用

h 或 左方向键(←)

光标向左移动一个字符

l 或 右方向键(→)

光标向右移动一个字符

k 或 上方向键(↑)

光标向上移动一个字符

j 或 下方向键(↓)

光标向下移动一个字符

gg

将光标定位到文档最开始

Shift g

将光标定位到文档最末尾

n Shift g

将光标定位到第 n 行

Shift 4

将光标定位到当前行的末尾

Shift 6

将光标定位到当前行的开始

w / n w

向后移动1个单位/ 向后移动n个单位(以单词为单位)

b / n b

向前移动1个单位/ 向前移动n个单位(以单词为单位)

        这里可能会比较疑惑,为什么光标移动要使用 h j k l ,而不是使用上下左右。这是因为,vim很多操作是为了更高的效率,在vim刚刚设计的时候(几十年前),键盘是没有上下左右的,所以是根据当时键盘的特点来设计的。当然,后来兼容了上下左右,所以我们也可以使用上下左右来移动。但是使用h j k l ,效率会更高,毕竟手不需要再移动下去。

        展示一下上面提及的几个指令,当然一些非常简单的就不展示了。注意,Shift是指键盘右下角的Shift,不要再键盘里打出一个Shift。

1.2复制(剪切)粘贴

指令

作用

yy / n yy

复制整行/ 复制当前行及以下的 n 行

dd / n dd

剪切当前行 / 剪切当前行及以下的n行

p / n p

粘贴复制的内容 / 粘贴n遍复制的内容

如果只剪切,不粘贴,就相当于删除

        这几个指令比较容易,自己尝试一下即可。

1.3 撤销

指令

作用

u

撤销

Ctrl r

对撤销进行撤销

        注意,在vim中,即使在底行模式下,使用 w 指令保存编辑的内容,也是可以进行撤销的。但是,如果进行了修改,然后使用 q 指令退出了,那么重新进去之后,是无法进行撤销的。

        插销就不演示了,就和word等等里面撤销一摸一样。

1.4 替换 / 删除/大小写切换

指令

作用

r / n r

替换一个字符 / 替换 n 个字符

shift r

进入替换模式

x / n x

删除一个字符/删除n个字符(向后删)

shift x / n shift x

同上,向前删

shift ~

快速进行单个字符的大小写切换(向后)

        一些示范,注意 r 操作后面跟的是想要换成什么字符,比如 rw 就是把当前光标的字符换成 w 。

2.底行模式

        进入底行模式只有一种方法,那就是在命令模式下按 shift : 进入。该模式下也有一些实用功能。

2.1本文件内操作

指令

作用

set nu / set nonu

显示行号 / 取消显示行号(nu是number的意思)

/ key

搜索单词,并且高亮显示(key可以是任意单词)

w

written,保存

q

quit,退出

wq

保存并退出

强制操作,w!,q!,wq! 分别表示强制保存,强制退出,强制保存并退出

!命令行操作

可以在不退出vim的情况下,执行命令行操作,比如编译、运行、查看文件等等

%s///g

将第一个斜杠和第二个斜杠之间的内容,替换成第二个斜杠和第三个斜杠之间的内容,全部替换

        值得注意的是,如果对一个文件没有写的权限,那么即使 按wq!强制保存,也是无法保存的,必须要对文件有写的权限才可以保存

        再看一个编译并执行文件的操作,其中有需要注意的地方。如下图,左边中间部分,代码是错误的,编译报错,我修改完文件之后,直接进行gcc编译,但是依然报错,而且报错还和上一次报错一样。此时就很疑惑,想到可能是没有保存,然后先保存,再编译,就通过了,如右边所示。

        要对一个文件编译,首先必须要先保存,否则编译的是上一次保存的文件。可能会造成错误。

        再演示一下单词替换。

2.2文件之间操作

        底行模式下,可以创建一个新文件,并且分屏操作。切换被操作的文件需要在命令模式下,但是放在这里将会比较好一点,下面有标注。

指令

作用

vs test.h

创建一个名为test.h 的文件,当然文件名可以是其他任意,自己取

(命令模式下)Ctrl w / Ctrl ww

切换被操作的文件

        在vim分屏的情况下,光标在哪里,就在编写哪一个文件

        先在底行模式下输入 vs test.h 并回车,就会出现如下界面。根据图中底部圆圈的地方,我们可以知道左边是test.h 文件,右边是test.c 文件;根据顶部圆圈可以知道,光标在左边,那么我们现在编辑的就是test.h 文件。

        进行编写代码,如下,编写完成之后,两个文件都要使用w指令保存。先在test.h 里面进入底行模式,保存test.h。再使用Ctrl ww 跳转到test.c 文件,保存test.c 。然后直接编译,如下。

        编译完成之后,会自动生成一个a.out 课执行文件,底行模式下输入 !./a.out 运行该可执行文件。结果如下图。

        当然,可以多次 vs file ,创建多个文件,但是一般情况下,分屏有两三个文件最多了,再多也影响阅读体验。如果想要退出当前分屏底行模式下输入 wq 即可(当然输入q就足够了,输入wq只是为了养成良好的习惯,保存并退出,避免修改了没保存)。

3.插入模式

        进入插入模式有多种方法,除了下面说到三种,当然也还有其他一些。

指令

作用

i

直接进入插入模式

a

光标向右移动一个字符,并进入插入模式

o

新起一行,并进入插入模式

        插入模式没有其他什么特别的指令好讲的,直接编代码就完事儿。

四、vim配置

        直接使用vim编辑器,会感觉非常麻烦,没有自动不全,行号,错误检测等等。所以我们要对vim进行一些配置。

1.手动配置

        vim在启动的时候,会自动在当前用户的目录下,寻找配置文件,如果没有,就是默认。什么是当前用户的目录?如下图, /home/username 就是当前用户的目录,home文件夹里面的用户文件夹。每一个用户对应一个vim配置文件

        如下图,自己创建一个.vimrc 文件,这就是配置文件,但是它是隐藏的,直接使用ll指令看不见。

        我们使用vim打开.vimrc这个文件,进行编辑。然后上网搜索vim配置,有很多的材料可以帮助了解,和vscode类似的。比如set nu 就是设置行号显示set cursorline 是设置高亮当前行。如下图

        当然,更多配置资料网上也有,这里也就不详细展开了,.vimrc 配置文件里面也是可以注释的,注释符号是 " (双引号)。比如下方的配置资料就是百度上面查询的:

2.自动化配置

        自动化配置就很舒服,在一些开源网站上面取搜索vim即可,比如Gitee,GitHub等等,上面也有详细的使用方法,很便捷。

五、注意事项

  1. 在vim编辑器里面,不要使用鼠标左右键和滑轮进行定位。
  2. 在一个文件里编写完代码,想要编译,一定要进入底行模式先保存,否则它编译的是修改前的代码。
  3. vim里各种模式不可以任意切换,一定是从命令模式进入其他模式。
  4. 如果不知道自己在什么模式,无脑Esc退回命令模式。
  5. vim配置文件里面的注释符号是双引号。

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

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

相关文章

KITTI数据集可视化(二):点云多种视图与标注展示的可视化代码解析

如有错误,恳请指出。 文章目录1. 在图像上绘制2d、3d标注框2. 在图像上绘制Lidar投影3. Lidar绘制前视图(FOV)4. Lidar绘制前视图(FOV)3d box5. Lidar绘制鸟瞰图(BEV)6. Lidar绘制鸟瞰图(BEV)2d box7. Lidar绘制全景图(RV)8. Lidar绘制全景图(RV)2d box在对KITTI数据…

立创eda专业版学习笔记(2)(从原理图导入变更失败)

出师不利啊,刚想把用一个原理图生成pcb板就出来这个,第一眼我是有点懵的。后来发现其实是我没搞清楚软件的基本逻辑。 原本,在一个板子的下面有一个原理图,原理图有1页,图标是这个样子 我本来是想新建一个pcb板&#x…

Spring MVC 返回数据

默认请求下⽆论是 Spring MVC 或者是 Spring Boot 返回的是视图(xxx.html),⽽现在都是前后端分离的,后端只需要返回给前端数据即可,这个时候我们就需要使⽤ResponseBody 注解了。 1.返回静态界面 创建前端页面index.…

spring boot配置多数据源(静态和动态数据源)

背景在开发过程中,很多时候都会有垮数据库操作数据的情况,需要同时配置多套数据源,即多个数据库,保证不同的业务在不同的数据库执行操作,通过mapper来灵活的切换数据源。本文以sqlserver和mysql混合数据源配置为例。配…

美团开放平台SDK自动生成技术与实践

总第549篇2023年 第001篇美团开放平台为整个美团提供了20业务场景的开放API,为了使开发者能够快速且安全的接入美团开放平台,美团开放平台提供了多种语言的SDK来提高开发者的接入效率。本文介绍了美团开放平台如何自动生成SDK代码的相关技术实现方案&…

【学习】深度强化学习、模型压缩

文章目录一、deep reinforcement learningPolicy-based Approach——Learning an Actor作为actor的神经网络small model网络可以被修剪一、deep reinforcement learning 强化学习场景 监督学习和强化学习之间: 训练一个聊天机器人-强化学习:让两个代…

基于c语言tftp服务器与客户端实现

开发环境:ubuntu 所用知识点:c,socket, tcp/ip协议 A)本实验主要实现tftp协议的服务器与客户端。 服务器实现功能有: 1)接收处理客户端请求,上传下下载文件 2)进行用户验证 3)对传输数据进行加密解密处理 4)生成日志文…

TensorRT学习笔记--Ubuntu20.04安装TensorRT 8.2.5

目录 前言 1--查看本机环境配置 2--下载并安装Tensor RT 3--实例测试 3-1--验证Onnx模型的可用性 3-2--将Onnx模型转换为推理引擎engine 3-3--基于Tensor RT使用engine模型进行推理 4--参考 前言 推荐结合官方文档 3.2.3节中的Tar File Installation安装教程进行安装&a…

【docker09】镜像发布到docker私有库

镜像发布到docker私有库 1.Docker Registry 官方Docker Hub地址:https://hub.docker.com/,中国大陆访问太慢,并且具有被阿里云取代的趋势,不太主流Dockerhub、阿里云这样的公共镜像仓库可能不太方便,涉及机密的公司不可能提供镜像…

PDF如何转换成excel文档?这个方法很实用

PDF如何转换成excel文档?PDF文件是我们经常使用的文件之一,我们在很多工作场景都能接触到PDF文件,不过PDF文件并不能适用于各种情况,比如我们想对文件内的数据进行更改,我们就需要把PDF文件转换成excel表格再进行修改&…

js 生成条形码

简介&#xff1a; 通过js生成条形码 效果展示&#xff1a; 示例代码&#xff1a; <!-- Created by IntelliJ IDEA. User: songsir Date: 2018/11/26 Time: 10:49 --> <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&…

分享一下我3个月收割大厂offer的一些经验总结

前几天&#xff0c;有位老粉私信我&#xff0c;说看到某95后学弟晒出阿里P7的工资单&#xff0c;他是真酸了…想狠补下技术&#xff0c;努力冲一把大厂。 为了帮到他&#xff0c;也为了大家能在最短的时间内做面试复习&#xff0c;我把软件测试面试系列都汇总在这一篇文章了。…

对抗搜索 学习笔记

先来看一道有意思题 situation 大意&#xff1a; 两个人玩井字棋&#xff0c;要求把所有位置填满后结束游戏。一方希望两者的连起来的线之差最多&#xff0c;一方希望最少。现在给定初始局面&#xff08;已经存在一些棋子&#xff09;以及先手&#xff0c;求最后的两者的连起…

SAP FICO预制凭证界面隐藏过账按钮

会计凭证一旦过账了就不能再进行修改&#xff0c;但其也提供了类似国内财务软件同样的预制功能&#xff0c;预制凭证过账之前不会更新会计系统。预制凭证虽然不更新科目余额&#xff0c;但同样会生成凭证编号&#xff0c;其凭证内容可以随意更改&#xff0c;也可以删除。一旦过…

bios设置u盘启动重装系统教程

​如今&#xff0c;大部分人都会采用U盘启动盘装系统&#xff0c;而使用U盘装系统之前&#xff0c;有一个很重要的步骤&#xff0c;那就是设置U盘启动。大部分电脑都可以直接通过u盘启动快捷键来选择U盘启动&#xff0c;少部分电脑只能通过bios设置u盘为第一启动项。那么&#…

支付宝的架构

自 2008 年双 11 以来&#xff0c;在每年双 11 超大规模流量的冲击上&#xff0c;蚂蚁金服都会不断突破现有技术的极限。2010 年双 11 的支付峰值为 2 万笔/分钟&#xff0c;到 2017 年双 11 时这个数字变为了 25.6 万笔/秒。 2018 年双 11 的支付峰值为 48 万笔/秒&#xff0c…

log4j2的使用

Log4j2的使用 概述 Apache Log4j 2是对Log4j的升级版&#xff0c;参考了logback的一些优秀的设计&#xff0c;并且修复了一些问题&#xff0c;因此带来了一些重大的提升&#xff0c;主要有&#xff1a; 异常处理&#xff0c;在logback中&#xff0c;Appender中的异常不会被应…

若依 ruoyi 配置多数据源 生成代码 导出代码

本文相关库说明&#xff1a;vue&#xff08;若依自带库&#xff09;db_game多数据源从库1db_paystore 多数据源从库2多数据源的情况下&#xff0c;想生成其他从库下数据库表对应的代码&#xff0c;但是若依自带的导入表中 是不会查询到从库各数据表信息的(只查询到若依框架对应…

我是这样解决 HBuilderX 安卓基座安装失败的问题

本文简介 点赞 关注 收藏 学会了 记录一个在使用 HBuilderX 开发 App 时遇到的问题。 同步资源失败&#xff0c;未得到同步资源的授权&#xff0c;请停止运行后重新运行&#xff0c;并注意手机上的授权提示 出现这个问题的原因是我把手机的 HBuilder App 给删掉了&#xff…

【自学Java】Java多维数组

Java多维数组 Java多维数组教程 Java 语言 中有 一维数组&#xff0c;也会有多维数组。如果有一个二维数组&#xff0c;那么数组的每个元素将会是一维数组&#xff0c;而不是单纯的元素。如果是一个多维数组&#xff0c;那么每个位置上面对应的是 纬度 - 1 的数组。 因为在平…