Linux工具之vi/vim

news/2025/1/15 18:18:29/

文章目录

    • vi/vim
      • vim的基本概念
      • vim的基本操作
      • 命令模式命令集
      • 末行模式命令集
      • vim的配置
        • 配置文件的位置
        • 常用配置选项

vi/vim

简单来说,vi和vim基本上都是所有Linux系统自带的编辑器,但是我们不排除在未来的某些极端条件下,需要利用vi/vim进行代码的编写或修改

其实vi和vim是一家子,他们都是多模式编辑器,而vim是vi的升级版,不仅支持vi的所有指令,还支持了语法高亮等特性,可视化操作甚至可以运行在其他操作系统上

因此我们主要介绍vim的使用

vim的基本概念

我们知道vim是多模式编辑器,他的模式有非常多,对于我们初学者目前只需要掌握其中的三种即可

命令模式(command mode)、插入模式(insert mode)、末行模式(last line mode)

在命令模式下,可以控制光标移动,删除,移动,复制粘贴,或者进入其他两种模式

在插入模式下,才可以对文件内容进行操作,按[ESC]即可回到命令模式

在末行模式下,做文件的保存或者退出,也可以进行文件替换,查找,列出行号等操作,在命令模式下输入英文冒号即可进入

vim的基本操作

进入vim,一般直接使用vim创建文件即可,例如

vim test.c

进入之后是处于命令模式,需要切换到插入模式才可以进行输入文字

从命令模式切换到插入模式有三种方式

  1. 输入i,普通插入模式,从光标处开始输入文字
  2. 输入a,从光标的下一个字符位置开始输入文字
  3. 输入o,从光标的下一行插入新行,从行首开始输入文字

从插入模式按下[ESC]即可切回命令模式

退出vim及保存文件需要在命令模式下输入冒号进入末行模式,再输入w即可保存,q即可退出,也可以wq一起执行

命令模式命令集

命令说明
i进入插入模式,从光标后开始输入
a进入插入模式,从光标的下一个字符开始输入
o进入插入模式,从光标的下一行开始输入
G移动到文章末尾
$移动到行尾
^移动到行首
w光标跳到下个单词的开头
e光标跳到下个单词的结尾
b返回上个单词的开头
#光标移动到该行的第#个位置
gg移动到文本开始
shift+g移动到文本末端
ctrl+b向后移动一页
ctrl+f向前移动一页
ctrl+u向后移动半页
ctrl+d向前移动半夜
x按一次删除光标的一个字符
#x删除光标位置之后的#个字符,包含光标
X按一次删除前面一个字符
#X删除光标之前的#个字符
dd删除所在行
yw复制这个单词到缓冲区
#yw复制#个字符到缓冲区
yy复制光标所在行到缓冲区
#yy复制#行
p粘贴
r替换所在字符
R替换所到之处的字符,按下[ESC]停止
u撤回
ctrl+r恢复撤回
cw更改光标所在的字到字尾处
c#w改#个字
ctrl+g列出光标所在行号
#G将光标移至第#行首

末行模式命令集

命令说明
set nu标明行号
#跳转到第#行
/关键字寻找关键字,按[n]跳转到下一个,从前往后找
?关键字寻找关键字,按[n]跳转到下一个,从后往前找
w保存文件
q退出文件,未保存就退出会报警告
wq保存并退出

vim的配置

配置文件的位置

在目录/etc/下面,有一个vimrc的文件,是对vim的配置文件,对所有用户有效,在用户主目录下也有(可以创建)个自己的配置文件,

常用配置选项

语法高亮 syntax on

显示行号 set nu

tab缩进空格数 set shiftwidth=4

更多内容可以访问如下开源项目

vim从入门到牛逼

感谢各位的支持,如果你发现文章中有任何不严谨或者需要补充的部分,欢迎在评论区指出


http://www.ppmy.cn/news/1281604.html

相关文章

财务数据智能化:用AI工具高效制作财务分析PPT报告

Step1: 文章内容提取 WPS AI 直接打开文件,在AI对话框里输入下面指令: 假设你是财务总监,公司考虑与茅台进行业务合作、投资或收购,请整合下面茅台2021年和2022年的财务报告信息。整理有关茅台财务状况和潜在投资回报的信息&…

Global Mapper SDK 19 中文开发文档(八)

7.2.8 GM_DBUtil (1)声明 public static class GM_DBUtil (2)方法 方法描述DBGetTableList获取指定空间数据库中的表列表DBIsDatabaseFile指示输入文件是否为数据库(Esri地理数据库、Spatialite等)DBMa…

用Disruptor框架实现生产者-消费者模式

ConcurrentLinkedQueue队列的秘诀就在于大量使用了无锁CAS操作。 现成的Disruptor框架实现CAS进行编程。 无锁的缓存框架:Disruptor 它使用无锁的方式实现了一个环形队列,非常适合实现生产者-消费者模式, 比如事件和消息的发布。如果队列是环…

Git 分布式版本控制系统(序章1)

第一章 Git 分布式版本控制系统 为什么学Git? 某些企业面试需要掌握Git,同时,也方便管理自己的Qt项目。 一、Git 客户端下载(Windows) 下载地址 https://gitee.com/all-about-git#git-%E5%A4%A7%E5%85%A8 二、Git 的特点 分支…

MySQL 5.7的新特性

MySQL 5.7 是一个重要的版本,它带来了许多性能提升和新特性,下面是一些显著的改进: 性能和可伸缩性的改进: 引入了改进的 InnoDB 存储引擎,提供了更好的性能和并发处理能力。默认的并发控制(Multi-threaded…

MicroPython的中断处理

本文会简单介绍中断的基本原理,对MicroPython在处理中断时的一些机制和问题进行阐述,并对实时控制中断编程做简单的介绍。 中断 什么是中断? 中断是计算机系统中非常重要的一种机制,简单的说就是当有I/O或其它因素发出中断信号…

【vue】开发常见问题及解决方案

有一些问题不限于 Vue,还适应于其他类型的 SPA 项目。 1. 页面权限控制和登陆验证页面权限控制 页面权限控制是什么意思呢? 就是一个网站有不同的角色,比如管理员和普通用户,要求不同的角色能访问的页面是不一样的。如果一个页…

面向对象进阶

static 需求:写一个javaBean类来描述这个班级的学生 属性:姓名、年龄、性别 行为:学习 package myStatic.a01staticdemo01; public class Student {private String name;private int age;private String gender; //新增:老师的姓…