Linux基础开发工具——vim(5)

文章目录

  • 前言
  • 一、vim命令图解
  • 二、进入和退出
  • 三、vim常用模式
  • 四、vim指令集
    • [set nu 设置行号](#set nu 设置行号)
    • [yy 复制](#yy 复制)
    • [dd 剪切](#dd 剪切)
    • [p 粘贴](#p 粘贴)
    • [u 撤销](#u 撤销)
    • [ctrl + r 重做](#ctrl + r 重做)
    • [G 移至文档尾](#G 移至文档尾)
    • [gg 移至文档头](#gg 移至文档头)
    • [ 移至当前行尾](# 移至当前行尾)
    • [^ 移至当前行头](#^ 移至当前行头)
    • [w / b 向后 / 前移动](#w / b 向后 / 前移动)
    • [~ 大小写切换](#~ 大小写切换)
    • [r 替换字符](#r 替换字符)
    • [R 替换模式](#R 替换模式)
    • [x 从右至左删除](#x 从右至左删除)
    • [X 从左至右删除](#X 从左至右删除)
    • [h j k l 光标移动](#h j k l 光标移动)
    • [/ 单词 搜索单词](#/ 单词 搜索单词)
    • [!常规命令 执行指令](#!常规命令 执行指令)
    • [%s/目标文本/替换后的文本/g 替换指定文本](#%s/目标文本/替换后的文本/g 替换指定文本)
    • [vs file 分屏操作](#vs file 分屏操作)
  • 五、vim配置
  • 总结

前言

哈喽,大家好,现在我们就来学习一下Linux开发的基础工具,vim!

这是一款小而美的编译器!

有一个很经典的问题,就是如何退出vim,然而就是这个简简单单的问题,在 Stack overflow 上就有几百万的浏览量,可见其使用是有一定的门槛的,当然vim也有很多的指令和极大的自定义空间,因此,我们需要不断的加以训练


一、vim命令图解

在正式讲解之前,我们不妨先来放个图来感受一下

二、进入和退出

进入

因为我用的是云服务器,所以在使用前就已经安装好了,如果你没有下载,则需要在 root 用户下通过指令 yum install -y vim 安装

安装完后就可以直接使用了,我们现在创建一个 test.c 文件,通过指令 vim test.c 来打开这个文件

其中一条条波浪线表示现在没有内容,此时我们输入字符会发现并不会有字符被写入,因为现在处于命令模式,顾名思义,就是只能输入命令的模式,如果想输入内容,需要先进入插入模式,单按 i 即可进入插入模式

现在可以愉快的编写内容了!

退出

当我们编辑好内容后,想退出 vim 会发现退出不了

这是一个经典问题,官方解释如下:插入模式无法直接退出 vim ,需要先进入命令模式,然后再切换为底行模式,输入 wq 才能保存内容并退出 vim

vim 复制代码
1、esc	//从插入模式切换为命令模式
2、:	//进入底行模式
3、wq	//保存并退出 vim

还是有点复杂的,难怪会难倒几百万人,hhhhh,现在回顾来时路,这种感觉难以表述~

三、vim常用模式

命令模式

命令模式是进入 vim 后的模式模式,也是 vim 中最根本的模式 ,在 vim 中,如果不知道自己现在处于什么模式下,可以无脑按 esc ,这样会切换至最开始的命令模式

命令模式下主要是以命令输入为主,这也是 vim 中指令最多的模式

插入模式

插入模式即编辑模式,在插入模式中,键盘的功能就是输入内容,各种指令不在生效 ,我们编辑内容是在插入模式中进行的,vim 模式支持语法高亮,前提是文件的后缀要与代码内容匹配

进入到插入模式一共有以下几种方法:

  1. 通过 i 切换,切换后光标停留在原位
  2. 通过 a 切换,切换后光标会回退一格
  3. 通过 o 切换,切换后会新起一行

进入方式有很多,一般是通过 i 直接切换

底行模式

底行模式比较特殊,是否进入底行模式的标志为 vim 下方是否有 : 如果有,说明现在处于底行模式,底行模式中也有很多指令,常见的如 set nu 为 vim 设置行号,w 保存内容,q 退出 vim

替换模式

替换模式主要用于对文本内容的修改,可以通过 R 进入替换模式,进入后 vim 左下角提示 REPLACE 说明进入成功,进入替换模式后,从键盘输入的内容会实时替换光标处的内容

想退出替换模式可通过 esc 切换成命令模式

视图模式

视图模式就是用来看文档内容的,可以通过 v 进入逐字符视图模式 VISUAL 此时默认选择当前光标处字符;也可以通过 V 进入逐行视图模式 VISUAL LINE ,此时就是默认选择光标处整行

视图模式主要是用来快速浏览文本的

四、vim指令集

下面给大家介绍一些常用的指令,大家要多练,这样就熟了

注意: 下面介绍的指令,大多数都是在命令模式下执行的,部分指令是在底行模式下进行,会有特别说明的,比如第一条指令 set nu 设置行号

set nu 设置行号

这条指令比较重要,因为它可以帮我们把行号设置出来,这样可以让我们的编辑器更好看,注意这需要在底行模式下

注意: 如果是未配置过的 vim ,设置行号退出后,再次打开 vim 需要重新设置,比较麻烦

yy 复制

而在 vim 中可以直接通过 yy 复制一行

vim 复制代码
//命令模式下
yy	//复制当前光标处整行内容
nyy	//复制当前光标往下 n 行内容

dd 剪切

vim 中只需要 dd 即可剪切当前光标处的整行内容

也可以用来删除,毕竟剪切就是不拷贝后的删除

vim 复制代码
//命令模式下
dd	//剪切当前光标处整行内容
ndd	//剪切当前光标往下 n 行内容

p 粘贴

关于之前复制和剪切的内容,可以通过 p 来进行粘贴,单按 p 粘贴一次,配合数字,可以将已复制或剪切的内容,粘贴 n 次

vim 复制代码
//命令模式下
p	//粘贴一次已复制或剪切的内容
np	//粘贴 n 次

u 撤销

vim 中也有后悔药,只要当前文件还没有离开过 vim 都可以进行撤销操作,具体实现为 u

vim 复制代码
//命令模式下
u	//撤销操作

ctrl + r 重做

如果对已撤销的步骤不满意,还可以通过 ctrl+r 进行重做,回退至为撤销前的状态

vim 复制代码
//命令模式下
ctrl+r	//重做,撤销已撤销的步骤

G 移至文档尾

在命令模式下,我们是不能对文档进行插入操作的,假设文档很长,而我们想看看文档尾的内容,那么我们可以通过 G 直接跳转至文档尾进行查看

G 可以配合数字,具体功能为跳转至指定 n 行,假设该行不存在,那么就会跳转至最后一行

vim 复制代码
//命令模式下
G	//跳转至文档尾
nG	//跳转至第 n 行

gg 移至文档头

这个相当于 G 的亲兄弟,不过 gg 是跳转至文档头

gg 也可以配合数字进行随机行的跳转

vim 复制代码
//命令模式下
gg	//跳转至文档头
ngg	//进行随机行的跳转

$ 移至当前行尾

美元符号 $ 可以使光标跳转至当前行尾

配合数字,往下跳转至第 n 行的行尾

vim 复制代码
//命令模式下
$	//跳转至行尾
n$	//向下跳转至第 n 行的行尾

^ 移至当前行头

它和 $ 是一对,别人是跳转至行尾,^ 是跳转至行头,它不可以配合数字

vim 复制代码
//命令模式下
^	//跳转至行头

有个很有意思的点,明明 是shift + f4 ,\^ 是 shift + f6 ,但是 是跳到行末,^是跳到行首,可能大佬键盘的左右跟我们不太一样吧!

w / b 向后 / 前移动

前面的 $ 和 ^ 是以行为单位,直接跳转至行尾或行头,而 w 或 b 是以单词为单位,进行前后移动,w 是向前移动,b 是向后移动,这个东西对英文比较友好,毕竟是别人设计的,实测如果是中文的话,会以符号为单位进行移动,如果中间掺杂单词,则会移动至单词处

当然,它也可以配合数字进行移动

vim 复制代码
//命令模式下
w	//以单词为单位向前移动
b	//以单词为单位向后移动
nw  /  nb	//移动 n 个单词位

~ 大小写切换

将光标处的字母进行大小写切换,如果一直按照不放,那么会一直往下进行大小写切换

配合数字,将光标后 n 个字母进行大小写切换

vim 复制代码
//命令模式下
~	//将光标处的字母进行大小写切换

r 替换字符

~ 是进行大小写切换,r 则是进行字符替换,先按 r 触发替换,然后输入待替换字符,输入完成后,光标处字符就会被替换

配合数字,将光标往后 n 个字符全部替换为待替换字符

vim 复制代码
//命令模式下
r	//进行字符替换,默认替换当前光标处字符
nr	//替换当前光标往后 n 个字符

R 替换模式

r 只能用于逐字符的替换,如果涉及修改的字符过多,且都为不同值时,需要进入替换模式,单按 R 进入替换模式,此时输入的字符会实时替换光标处的字符,换句话说,现在能够直接替换单词

如果想退出替换模式,按 esc 切换为命令模式就行了

cpp 复制代码
//命令模式下
R	//进入替换模式

x 从右至左删除

删除当前光标处字符,如果是 x 删除的就是光标右边的字符,即从右至左删除

配合数字,删除光标右边 n 个字符

vim 复制代码
//命令模式下
x	//删除当光标右边的字符
nx	//删除光标右边 n 个字符

X 从左至右删除

这个就是 x 的反面了,X 删除的是光标左边的字符,即从左至右删除

也可以配合数字,删除左边的 n 个字符

vim 复制代码
//命令模式下
X	//删除光标处左边的字符
nX	//删除光标左边 n 个字符

h j k l 光标移动

在命令模式下,我们可以直接通过方向键进行移动,也可以通过 h j k l 这个四个键进行移动,不过位置对应比较奇怪

  1. h 向左移动,巧计 h 位于这四个键的最左边
  2. j 向下移动,巧计 j 为 jump ,站在悬崖边往下跳就是向下移动
  3. k 向上移动,巧计 k 为 king ,国王,至高无上,就是向上移动
  4. l 向右移动,巧计 l 在最右边

/ 单词 搜索单词

底行模式下

我们可以在底行模式下,搜索文本内的单词,假设我们想搜索 Hello 这个单词,只需要先进入底行模式,输入 /Hello 就可以在文本中查找单词了

vim 复制代码
//底行模式下
:/单词	//查找指定单词

!常规命令 执行指令

这个指令就比较厉害了,它可以让我们在不退出 vim 的情况下,执行各种指令

比如我们在 vim 中编写了一个C程序 test.c,保存后,通过指令 :!gcc test.c 可以直接将 test.c 文件编译并链接生成可执行文件,然后再通过 :!./a.out 执行这个程序,执行结束后,返回 vim 的界面

注意: 底行模式中的 ! 还有强制的意思,当我们 wq 退不出文件时,可以通过 !wq 强制退出并保存文件


%s/目标文本/替换后的文本/g 替换指定文本

既然有搜索,那就有替换,很简单 :%s/文本A/文本B/g 可以在文档中搜索出 文本A 并将其替换为 文本B

显然,如果目标文本不存在就会报错

vim 复制代码
//底行模式下
:%s/文本A/文本B/g	//搜索出文本A,然后将其替换为文本B


我们发现确实发生了变化

vs file 分屏操作

我们在写一个程序时,常常会有几个文件,比如数据结构中的二叉树,会有两个 .c 一个 .h ,显然此时一个窗口是不够我们用的,因此 vim 支持多开窗口,指令为 :vs file 新起一个窗口,打开文件 file ,如果文件不存在,会新建一个

注意: 窗口理论上来说可以开辟无数个,但如果开的多了,是非常不好操作的,如果你用的是一块横放的带鱼屏,因此我们一般只会打开2~3个窗口使用。窗口可以有很多个,但光标永远只有一个,当打开新窗口时,光标也会跟着过去,如果想实现光标在不同窗口间的切换,只需要使用 ctrl+ww 即按住 ctrl 的同时快速点击 w 两次

vim 复制代码
//底行模式
:vs file	//打开新文件,呈分屏状态
:ctrl+ww	//实现光标在不同窗口间的移动

五、vim配置

自己配置

前面说过,默认的 vim 就像一个草坯房,能用,但很不好用,连个基本的行号都需要自己手动开启,不过没事,vim 可以让我们对其进行装修,即配置 vim ,配置好的 vim ,不仅有行号,还有焕然一新的界面,括号自动补全,语法提示等功能,总之用起来很爽就对了

实际效果如下:

注意: 是在自己的 ~ 路径下创建 .vimrc 文件,这个配置只对当前用户生效,推荐这样做,毕竟是属于自己的个性化设置

自动化配置

但是我选择使用别人的配置!嘻嘻!

使用这串指令:

vim 复制代码
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

当然,这个自动安装的方法,目前仅适用于 Centos 7.6 ,其他平台可能会出现安装失败的情况,以下是下载好的结果!



总结

vim 是一款优秀的工具,当然其复杂的指令和别扭的使用方法也是劝退了很多人,我对 vim 的看法是我们不使用它,但得学会基本使用方法,后续的代码编写可以借助 Vs Code 这个强大工具,当没有 Vs Code 时,vim 就派上用场了,别急孩子们!!!

相关推荐
Java不加班3 分钟前
Java 后端定时任务实现方案与工程化指南
后端
心在飞扬32 分钟前
RAG 进阶检索学习笔记
后端
Moment33 分钟前
想要长期陪伴你的助理?先从部署一个 OpenClaw 开始 😍😍😍
前端·后端·github
Das1_34 分钟前
【Golang 数据结构】Slice 底层机制
后端·go
得物技术35 分钟前
深入剖析Spark UI界面:参数与界面详解|得物技术
大数据·后端·spark
古时的风筝36 分钟前
花10 分钟时间,把终端改造成“生产力武器”:Ghostty + Yazi + Lazygit 配置全流程
前端·后端·程序员
Cache技术分享37 分钟前
340. Java Stream API - 理解并行流的额外开销
前端·后端
初次攀爬者40 分钟前
RocketMQ 消息可靠性保障与堆积处理
后端·消息队列·rocketmq
ygxb1 小时前
如何去创建一个规范化的Agent SKIll?
后端·ai编程·claude
JxWang051 小时前
Task01:环境搭建,初识数据库
后端