当前位置: 首页 > article >正文

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

文章目录

  • 前言
  • 一、vim命令图解
  • 二、进入和退出
    • 进入
    • 退出
  • 三、vim常用模式
    • 命令模式
    • 插入模式
    • 底行模式
    • 替换模式
    • 视图模式
  • 四、vim指令集
    • set nu 设置行号
    • yy 复制
    • dd 剪切
    • p 粘贴
    • u 撤销
    • ctrl + r 重做
    • G 移至文档尾
    • gg 移至文档头
    • $ 移至当前行尾
    • ^ 移至当前行头
    • w / b 向后 / 前移动
    • ~ 大小写切换
    • r 替换字符
    • R 替换模式
    • x 从右至左删除
    • X 从左至右删除
    • h j k l 光标移动
    • / 单词 搜索单词
    • !常规命令 执行指令
    • %s/目标文本/替换后的文本/g 替换指定文本
    • 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

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 复制一行

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

dd 剪切

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

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

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

p 粘贴

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

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

u 撤销

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

//命令模式下
u	//撤销操作

ctrl + r 重做

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

//命令模式下
ctrl+r	//重做,撤销已撤销的步骤

G 移至文档尾

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

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

//命令模式下
G	//跳转至文档尾
nG	//跳转至第 n 行

gg 移至文档头

  这个相当于 G 的亲兄弟,不过 gg 是跳转至文档头
  gg 也可以配合数字进行随机行的跳转

//命令模式下
gg	//跳转至文档头
ngg	//进行随机行的跳转

$ 移至当前行尾

  美元符号 $ 可以使光标跳转至当前行尾
  配合数字,往下跳转至第 n 行的行尾

//命令模式下
$	//跳转至行尾
n$	//向下跳转至第 n 行的行尾

^ 移至当前行头

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

//命令模式下
^	//跳转至行头

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

w / b 向后 / 前移动

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

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

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

~ 大小写切换

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

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

r 替换字符

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

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

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

R 替换模式

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

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

//命令模式下
R	//进入替换模式

x 从右至左删除

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

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

X 从左至右删除

  这个就是 x 的反面了,X 删除的是光标左边的字符,即从左至右删除
  也可以配合数字,删除左边的 n 个字符

//命令模式下
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 中编写了一个C程序 test.c,保存后,通过指令 :!gcc test.c 可以直接将 test.c 文件编译并链接生成可执行文件,然后再通过 :!./a.out 执行这个程序,执行结束后,返回 vim 的界面

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

在这里插入图片描述
在这里插入图片描述

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

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

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

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

在这里插入图片描述
在这里插入图片描述

我们发现确实发生了变化

vs file 分屏操作

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

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

在这里插入图片描述

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

五、vim配置

自己配置

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

在这里插入图片描述
实际效果如下:
在这里插入图片描述

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

自动化配置

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

使用这串指令:

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 就派上用场了,别急孩子们!!!


http://www.kler.cn/a/568827.html

相关文章:

  • 带你深入了解前端【HTML+JavaScript】
  • web3.0简介
  • Jenkinsfile流水线构建教程
  • Vulhub靶机 AppWeb认证绕过漏洞(CVE-2018-8715)(渗透测试详解)
  • jenkens使用笔记
  • 【手撕算法】K-Means聚类全解析:从数学推导到图像分割实战
  • 解决单元测试 mock final类报错
  • 深入理解Web通信基础:HTTP响应码、请求方法与协议安全
  • Qt | 实战继承自QObject的IOThread子类实现TCP客户端(安全销毁)
  • Codeforces Round 1007 (Div. 2)(ABCD1)
  • 代码的解读——自用
  • 如何把网络ip改为动态:全面指南
  • 当JMeter遇见AI:性能测试进入智能时代(附实战案例)
  • 链表OJ(十二)23. 合并 K 个升序链表 困难 优先级队列中存放指针结点
  • 计算器算法题
  • Maven 与持续集成(CI)/ 持续部署(CD)(二)
  • EasyRTC:支持任意平台设备的嵌入式WebRTC实时音视频通信SDK解决方案
  • 前端正则表达式完全指南:从入门到实战
  • (贪心 合并区间)leetcode 56
  • 系统或软件的可靠性(Reliability)