Linux工具学习之【vim】

news2024/11/8 5:54:09

✨个人主页: Yohifo
🎉所属专栏: Linux学习之旅
🎊每篇一句: 图片来源
🎃操作环境: CentOS 7.6 阿里云远程服务器

  • Whatever is worth doing is worth doing well.

    • 任何值得去做的事情,都值得把它做好。

    向阳而生


文章目录

  • 📘前言
  • 📘正文
    • 📖vim 基本用法
      • 📃进入 vim
      • 📃退出 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 配置
      • 📃自己配置
      • 📃自动化配置
  • 📘总结


📘前言

vim 是一款小而美的编辑器,是 vi 的升级版,完美支持了其所有指令,并且新增了许多特性,作为一款编辑器,我们可以在上面写各种语言的代码(主要是C/C++)。vim 有多种模式,光是如何退出 vim 这个问题在 Stack overflow 上就有几百万的浏览量,由此可见 vim 还是有一定的使用门槛的。当然 vim 中还有许多指令和极大的自定义空间,需要不断练习以熟练使用 vim,最后我们还可以根据个人喜好配置出一款属于自己的 vim
vim的界面


📘正文

📖vim 基本用法

要想学会 vim 先要学会进入与退出它

📃进入 vim

首先要保证自己的 Linux 中已经安装好了 vim (云服务器大多数都是出厂就安装好了),如果没有安装,需要在 root 用户下通过指令 yum install -y vim 安装

安装好 vim 后,可以直接使用,不过现在的 vim 只是一个草坯房,比较简陋

如果已经创建好了文件,假设为 test.c ,那么我们可以直接通过 vim test.c 打开这个文件

$ vim test.c

打开 vim
打开后的 vim 长这个样子

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

📃退出 vim

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

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

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

不难发现,退出 vim 是一件比较麻烦的事,这也难怪它会成为困扰几百万初学者的问题
退出 vim
上面是退出 vim 的一个完整过程


📖vim 常用模式

vim 有很多种模式,不过常用的就 3 ~ 5 种,下面来介绍 vim 的五种常用模式

📃命令模式

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

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

📃插入模式

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

进入插入模式的方法:

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

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

📃底行模式

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

注意:如果发现自己退不出 vim ,可以通过 !wq 强制保存并退出,再退不出说明权限不足

📃替换模式

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

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

📃视图模式

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

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

各种模式间的关系如下图所示:
各种模式间的关系


📖vim 指令集

vim 中有各种各样的命令,下面就来介绍介绍比较常用的指令

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

📃set nu 设置行号

底行模式下

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

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

//底行模式下
:set nu	//设置行号,set nonu是取消设置行号

设置行号

📃yy 复制

在 VS 中,复制一行代码是 ctrl+c,而在 vim 中可以直接通过 yy 复制一行

除了复制一行外,yy 还可以配合数字,复制 n

  • 比如 10yy 可以复制当前光标以下十行内容
//命令模式下
yy	//复制当前光标处整行内容
nyy	//复制当前光标往下 n 行内容

📃dd 剪切

除了可以复制内容,还可以剪切内容,VS 下是 ctrl+x ,比较麻烦,vim 中只需要 dd 即可剪切当前光标处的整行内容

dd 也可以配合数字,剪切 n 行内容,比如 5dd 会剪切当前光标往下五行内容

小技巧

  • 我们可以通过剪切,变相实现内容的删除,剪切完不拷贝就是删除了
//命令模式下
dd	//剪切当前光标处整行内容
ndd	//剪切当前光标往下 n 行内容

📃p 粘贴

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

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

📃u 撤销

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

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

📃ctrl + r 重做

如果对已撤销的步骤不满意,还可以通过 ctrl+r 进行重做,回退至为撤销前的状态,其实 vim 中的 pctrl+r 相当于VS中的 ctrl+zctrl+y ,即撤销与重做

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

📃G 移至文档尾

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

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

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

📃gg 移至文档头

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

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

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

📃$ 移至当前行尾

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

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

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

📃^ 移至当前行头

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

注:$^ 均在键盘上方的数字区,$shift+4^shift+6 ,有点奇怪,明明 $ 在左边,却是移动到左边(行尾),可能大佬的键盘跟我们的不一样?

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

📃w / b 向后 / 前移动

前面的 $^ 是以行为单位,直接跳转至行尾或行头,而 wb 是以单词为单位,进行前后移动,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 这个四个键进行移动,不过位置对应比较奇怪

  • h 向左移动,巧计 h 位于这四个键的最左边
  • j 向下移动,巧计 jjump ,站在悬崖边往下跳就是向下移动
  • k 向上移动,巧计 kking ,国王,至高无上,就是向上移动
  • l 向右移动,巧计 l 在最右边

键位比较奇怪,大佬的世界我们不懂,顺便提一下,之所以会有这四个键,是因为键盘一开始是没有方向键的(当然现在有些键盘也没有,比如 HHKB 的键盘),它长这个样子
HHKB
像这种便携的键盘简直是资深程序员的梦中情物(很贵,几千一把)

//命令模式下
h	//左移
j	//下移
k	//上移
l	//右移

📃/ 单词 搜索单词

底行模式下

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

查找

//底行模式下
:/单词	//查找指定单词

📃!常规命令 执行指令

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

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

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 ,不仅有行号,还有焕然一新的界面,括号自动补全,语法提示等功能,总之用起来很爽就对了

📃自己配置

自己配置 vim ,需要在自己的 ~ 目录下创建 .vimrc 这个文件,然后进入文件输入配置选项进行配置,保存并退出即可,配置在保存后会立即生效

配置中
下面是效果展示:
配置完成

部分配置选项

  • set nu 设置行号
  • set autoindent 自动缩进
  • set cursorline 突出显示当前行
  • 还有很多很多选项,可以自己去网上搜索

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

📃自动化配置

很多人可能不想折腾,想直接使用别人配置好的文件,当然可以,我们可以通过指令下载别人已经写好的脚本,然后等待脚本运行完成后,我们就得到了一个十分精美的 vim

精装版vim
关于自动安装的方法

  • 首先需要复制这串指令 curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
  • 然后进入自己的账户,输入指令,此时提示输入 root 密码,因为安装需要借助 root 权限
  • 密码输入后慢慢等待安装就行了,时间有点长,慢慢等待即可
  • 如果安装过程中卡住了,可以通过 ctrl+c 强制终止,然后重新安装
  • 特别鸣谢汤神提供的安装脚本,原帖地址在这里

自动化安装
注意: 这个自动安装的方法,目前仅适用于 Centos 7.6 ,其他平台可能会出现安装失败的情况


📘总结

以上就是关于Linux工具:vim 的全部介绍了,vim 是一款优秀的工具,目前世界上仍有许多程序员热爱并使用它,原因很简单,它的开发效率很高,熟练后可以直接起飞。当然其复杂的指令和别扭的使用方法也是劝退了很多人,我对 vim 的看法是我们不使用它,但得学会基本使用方法,后续的代码编写可以借助 Vs Code 这个强大工具,当没有 Vs Code 时,vim 就派上用场了

如果你觉得本文写的还不错的话,期待留下一个小小的赞👍,你的支持是我分享的最大动力!

如果本文有不足或错误的地方,随时欢迎指出,我会在第一时间改正

星辰大海

相关文章推荐
Linux 权限理解和学习 (热榜文章,推荐食用)
听说Linux基础指令很多?这里都帮你总结好了

感谢支持

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

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

相关文章

springboot垃圾分类查询管理系统

1.介绍 垃圾分类查询管理系统,对不懂的垃圾进行查询进行分类并可以预约上门回收垃圾。 让用户自己分类垃圾, 按国家标准自己分类, 然后在网上提交订单, 专门有人负责回收, 统一回收到垃圾处理站, 然后工人…

Renesas 3 --烧写

1.烧录Boot程序 1.1,连接RESET_OUT, TOOL0, GND到板子。 1.2,上电后烧录器上指示灯亮(假如不亮,重新上电烧录器) 1.3,用Renesas flash programmer来烧写软件(新建项目,然后保存项目…

RAW怎么转为JPG?这些转换技巧值得收藏

相信大多数的人,出去外面游玩时都喜欢使用相机来拍照,但是大多数相机拍出来的照片都是RAW格式,图片传到电脑时,会因为格式的不兼容而导致无法查看,这个时候我们就需要把图片的格式进行转换,例如我们将其转换…

Day850.GuardedSuspension模式 -Java 性能调优实战

GuardedSuspension模式 Hi,我是阿昌,今天学习记录的是关于GuardedSuspension模式的内容。 小灰工作中遇到一个问题,开发了一个 Web 项目:Web 版的文件浏览器,通过它用户可以在浏览器里查看服务器上的目录和文件。 这…

(原创)Flow数据流的使用

前言 这篇文章主要介绍Flow的一些基础使用方法 同时介绍如何用Flow请求网络数据 下面开始! 什么是Flow Flow翻译过来,是“流”的意思 举例说明,在大自然中,常见的如水流 是从高往低流动的 那么在计算机世界里,所谓的…

loss盘点: asl loss (Asymmetric Loss) 代码解析详细版

1. BCE公式部分 可以简单浏览下这篇博客的文章: https://blog.csdn.net/qq_14845119/article/details/114121003 这是多分类 经典 BCELossBCELossBCELoss 公式 L−yL−(1−y)L−L -y L_{} - (1-y) L_{-} L−yL​−(1−y)L−​ 其中,L/−L_{/-}L/−​…

Docker保姆级学习教程

文章目录1、什么是Docker1.1、容器技术1.2、容器与虚拟机比较1.3、Docker特点1、更高效的利用系统资源2、更快速的启动时间3、一致的运行环境4、持续支付和部署5、更轻松的迁移6、更轻松的维护和扩展2、Docker组件学习2.1、Docker客户端和服务器2.2、Docker镜像2.3、Registry&a…

奇怪的知识——Windows下怎么修改进程的名称?

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:无尽的折腾后,终于又回到…

element-plus的form表单form-item的prop怎么写才能正确校验,实现逻辑是怎么样的?

不管是element-plus还是上一个版本的element-ui,都是一个使用很广泛的基于csshtmljs的ui组件库,它的form表单自带强大的校验功能,form-item的prop怎么写才正确,实现逻辑是怎么样的?element-plus的form表单的model、for…

聚观早报 | 苹果市值跌破2万亿美元大关;卢伟冰晋升小米集团总裁

今日要闻:苹果市值跌破2万亿美元大关;卢伟冰晋升小米集团总裁;京东方拿下iPhone 15订单;英伟达与富士康达成合作;哪吒汽车旗下车型价格调整苹果市值跌破2万亿美元大关 1 月 4 日消息,据国外媒体报道&#x…

C51单片机连接wifi模块,发送AT指令

一、AT指令AT 指令集是从终端设备( Terminal Equipment , TE) 或 数据终端设备 ( Data TerminalEquipment , DTE) 向终端适配器 (Terminal Adapter , TA) 或 数据电路终端设备 (Data CircuitTerminal Equipment &#…

CDGA|企业数字化转型进展得越快就越好吗?

数据治理并不是一件简单的事情。即使是行业知名公司,在高度重视和确保投入的情况下,完成全公司“数据底座”/“数据中台”的所耗时间也往往以年计。并且,还需要注意到,数据规范只是数字化转型的一个维度而已: 在国标《…

SQL INSERT INTO 语句

INSERT INTO 语句用于向表中插入新记录。 SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新记录。 SQL INSERT INTO 语法 INSERT INTO 语句可以有两种编写形式。 第一种形式无需指定要插入数据的列名,只需提供被插入的值即可: INSERT INTO t…

Python爬虫常用哪些库?

经常游弋在互联网爬虫行业的程序员来说,如何快速的实现程序自动化,高效化都是自身技术的一种沉淀的结果,那么使用Python爬虫都会需要那些数据库支持?下文就是有关于我经常使用的库的一些见解。 请求库: 1、urllib&a…

matlab复杂函数多元函数拟合

简介 本文介绍了基于matlab实现的复杂函数以及多元函数的拟合。在工程和研究中偶尔会遇到要用一个非常复杂的数学公式来拟合实验测量数据,对这些复杂的数学公式拟合时,采用常见的拟合方法往往会失败,或者得不到足够精确的结果。本文以笔者多…

AVL树:高度平衡的二叉搜索树

AVL树 AVL树和BST树的联系   答:BST树(二叉排序树)当节点的数据key有序时是一棵单支树,查找时效率直接降低到O(N)而不是树高,为了使树尽量两边均匀,设计出了AVL树,AVL树的左右高度差不超过1。…

sql语句练习题1

1、选择部门30中的所有员工; 要注意到查的是所有员工 代码如下: mysql> select * from emp where deptno 30;2、列出所有办事员(CLERK)的姓名,编号和部门编号; 注意的是要查的是姓名,编号和部门编号 范围限定的是…

并发编程的原子性 != 事务ACID的原子性

△Hollis, 一个对Coding有着独特追求的人△这是Hollis的第 412 篇原创分享作者 l Hollis来源 l Hollis(ID:hollischuang)关于原子性,很多人在多个地方都听说过,大家也都背的很熟悉。在事务的ACID中,有原子性…

儒家思想和道家思想的三个主要差异

孔子、孟子、老子、庄子,这四位古代思想家被称为“中国四哲”,他们分别代表了儒家和道家思想。这两大思想流派,是数千年来中国人智慧的结晶和文化的瑰宝。01先秦儒家思想的发展,经过了三个阶段,第一阶段是孔子&#xf…

CHAPTER 7 Ansible playbook(四)

ansible-playbook7.1 roles(角色)7.1.1 Ansible Roles 介绍7.1.2 Roles结构7.1.3 存储和查找角色7.1.4 制作一个Role7.1.5 使用角色7.1.5.1 经典方法7.1.5.2 import_role7.1.6 如何使用Galaxy7.1 roles(角色) 7.1.1 Ansible Role…