【Linux】顶级编辑器Vim的基本使用及配置

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

👑作者主页@安 度 因
🏠学习社区安度因的学习社区
📖专栏链接Linux

文章目录

如果无聊的话就来逛逛 我的博客栈 吧! 🌹

一、前言

在这里插入图片描述

今天 a n d u i n anduin anduin 将为大家讲解 Linux 下一款功能十分强大的编辑器 vim 。vim 十分好用但是好用的前提是 熟练度 + 配置 两者都有的情况下才能得心应手。而新手对于 vim 是很难操作的所以今天我们会讲解 vim 的基本使用并且讲解 vim 相关的配置。帮助大家快速上手 vim 编辑器。

二、vim基本概念

vim 是一个功能非常强大的全屏幕文本编辑器在 Linux 中vim 编辑器被广泛使用。因为其功能丰富尤其受程序员喜爱。

vim 也是一个类似于 vi 的著名的功能强大、高度可定制的 文本编辑器 在 vi 的基础上改进和增加了很多特性。

vim 和 vi 一样是多模式编辑器不同的是 vimvi 的升级版本它不仅兼容 vi 的所有指令并且糅合了一些新的特性在 vim 中。例如语法高亮、可视化操作这些不仅可以在终端运行也可以也可以运行于 x window、 mac os、windows 。

区分编辑器和 I D E IDE IDE

可能我们之前就是在 vs2022 、Devc++ 上写代码在这类 I D E IDE IDE 中一个软件就可以涵盖所有功能包括编辑编辑调试等等而我们的 vim 是编辑器单纯是写代码的。如果要编译则需要用到 gccg++调试需要用到 gdb 。工具之间互相独立虽然 vim 可以对功能进行整合。但是还是要拎清概念vim 是一款编辑器。

vim 拥有的模式一共有 12 12 12 种模式但我们 真正常用的只有三种 命令模式command mode、插入模式Insert mode和底行模式last line mode) 。所以我们今天在将 vim 基本操作时主要围绕这三种模式进行讲解

先了解一下这三种模式

  • 正常/普通/命令模式(Normal mode)

控制屏幕光标的移动字符、字或行的删除移动复制某区段及进入Insert mode下或者到 last line mode 。命令模式的功能很丰富使操作便捷。

  • 插入模式(Insert mode)

只有在Insert mode下才可以做 文字输入 按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

  • 底行模式(last line mode)

文件保存或退出也可以进行文件替换找字符串列出行号等操作。 在命令模式下shift+: 即可进入该模式。如果要查看你的所有模式方法为打开vim底行模式直接输入 :help vim-modes

三、vim 基本操作

首先我们先讲讲最基本的操作不说原理只看操作。

当我们在终端输入 vim 时会弹出这个界面

image-20230104092149302

这个就是我们 vim 的界面如果要退出那么就需要按下 : q 退出。

而 vim 另一个最基本的操作就是以 vim 方式打开文件指令vim file 这里的 file 为文件名如果文件不存在当保存并退出 vim 时会自动创建该文件。如果文件存在则会直接打开文件。但是此刻我们是不能进行输入操作的。

初识 vim 后我们提出两个问题

  1. : q 为什么可以退出界面是和模式有关吗
  2. 之前说到过模式那么 vim file 进入的界面默认是什么模式为什么不能输入

大家先别着急因为我们接下来讲解的就是三种模式的基本操作而这两个问题在我讲完三种模式的操作时大家自然也就明白了所以我们接着往下看~

1、模式切换

vim 默认打开为 命令模式 命令模式下是无法进行输入操作的。在命令模式下可以实现对各种模式的切换比如

  • 命令模式 切换至 插入模式 按 i / a / o 进入插入模式三种方法都具有不同的效果。
  • 命令模式 切换至 底行模式 shift : 两个键同时按住进入模式。进入模式后在 vim 左下角出现了 : q 直接退出 wq w 保存q 退出保存退出。
  • 任意模式 切换至 命令模式 E S C ESC ESC 直接切换至命令模式。

对于上面的切换操作可以用一张图表示

image-20230104100907192

了解了这些我们相当于已经学会了 vim 的最小集(能操作但不多)基于这些我们尝试在 vim 下写一段代码

在这里插入图片描述

2、命令模式

命令模式的目的就是让 vim 编辑更加高效

在命令模式下我们可以使用 hjkl 进行 左、下、上、右 的光标移动。这种规定可以使得操作更加高效集中。

下面我们对常用命令做出一些整理(下面出现的 n 均代表数字)

复制粘贴剪切

  • yy / nyy 复制光标所在行或者复制包含当前行在内的 n 行
  • p / np 粘贴一行或多行相同内容到当前光标所在行之下
  • dd / ndd 对当前行或者当前行在内的 n 行的内容进行剪切移动光标到目标行进行 p 粘贴(只剪切不粘贴相当于就是删除)

撤销

  • u 撤销上一步操作
  • ctrl + r 对撤销进行撤销

撤销只能对于本次操作内退出保存再次操作时是无法撤销的。

光标定位

对全局文档

  • shift g 将光标定位到文档结尾
  • gg 将光标定位到文档开头
  • n shift g : 将光标定位到文档指定行

对局部长文本行(例如若干行100字符长度行内快速定位)

  • shift $ 将光标定位到当前文档行的结尾
  • shift ^ 将光标定位到当前文档行的开头
  • w / b 按照单词为单位进行后 / 前移动(单词定义对于长串字符组成的非单词也认为是单词)
  • nw / nb 默认单词数从 0 开始进行后 / 前移动 n 个单词间距

文本编辑

  • shift ~ 对文本行进行快速大小写切换小写转大写大写转小写。按住不动默认一直切换直到文本行末尾
  • r 字符 / nr 字符 替换光标所在的字符或者对于 n 个字符文本行进行批量化替换如果 n 超过文本行长度则不会进行替换
  • shift r 进入替换模式该模式输入什么则对光标位置完成对等的替换按退格键删除就是复原
  • x / nx 对文本行内进行向后删除或者对光标开始 n 个字符进行向后删除按住不动默认一直删除简单概括行内删除左侧–>右侧
  • shift x / shift nx 行内删除右侧–>左侧

由于命令行模式指令较多且部分指令单独演示起来效果不太好所以我就完整演示一下 光标定位组 大家看一下效果即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vA2j40u9-1672838062778)(https://anduin.oss-cn-nanjing.aliyuncs.com/vim%E6%BC%94%E7%A4%BA8.gif)]

3、插入模式

  • 按 i 进入插入模式后从光标当前位置开始输入
  • 按 a 进入插入模式后光标往后跳转一个字符从跳转后位置开始输入
  • 按 o 进入插入模式后另起新的一行从行首开始输入

4、底行模式

命令模式按 shift 进入底行模式。

调出 / 隐藏行号

  • set nu 显示行号
  • set nonu 隐藏行号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yjk0HCSg-1672838062778)(https://anduin.oss-cn-nanjing.aliyuncs.com/vim%E6%BC%94%E7%A4%BA3.gif)]

搜索

  • : /关键字 按照关键字搜索数据并显示高亮

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KeD7BGmh-1672838062779)(https://anduin.oss-cn-nanjing.aliyuncs.com/vim%E6%BC%94%E7%A4%BA4.gif)]

保存和退出

  • w 保存
  • q 退出
  • wq 保存并退出
  • w! 在写保护文件情况下无法保存强制保存。 ! 代表强制
  • q! 强制退出
  • wq! 强制保存并退出

强制的前提是 有权限 没权限照样不能强制。 ! 适用于强行修改写保护文件或配置文件等操作。

不退出 vim 执行 shell 命令

底行模式中可以通过 !command 来完成不退出 vim 执行 shell 指令例如我们执行 ls -l 指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uYDkr4e1-1672838062779)(https://anduin.oss-cn-nanjing.aliyuncs.com/vim%E6%BC%94%E7%A4%BA9.gif)]

执行命令之后会跳转到终端这时按下 Enter 键返回。

批量替换数据

%s///g可以对数据进行批量替换g 代表全局例如: %s/hello/HELLO/g 是对全局中将 hello 替换为 HELLO

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mexUPtDN-1672838062779)(https://anduin.oss-cn-nanjing.aliyuncs.com/vim%E6%BC%94%E7%A4%BA10.gif)]

分屏

在底行模式下使用vs file 创建一个 file 文件这样就可以分屏。

如果想要知道我们当前处于哪个屏幕只要明确一点在 vim 中光标在哪里我们就是在编写哪个文件

通过 ctrl + ww 我们就可以切换到不同界面分屏可以支持多个但是推荐一般分屏 2 - 3 个就够用了如果对于退出文件还是常规操作下面我们全部演示一下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6qbnpfAH-1672838062779)(https://anduin.oss-cn-nanjing.aliyuncs.com/vim%E6%BC%94%E7%A4%BA11.gif)]

四、vim 的配置

我们上面演示操作的时候可以发现当前使用的 vim 编辑器没有智能化补全没有缩进连 tab 键都是八格使用起来非常不方便。所以我们的 vim 通常需要配置。所谓配置就是按照固定方法让 vim 编辑器编写代码更加舒适更加利于使用。

通常 vim 配置有两种方案自定义配置自动化配置

自定义配置

自定义 配置就是按照自己的喜好配置但是配置的时候可能会遇到很多问题所以接下来我们简单就讲一下原理。

vim 在启动时会自动在当前用户的 家目录 下寻找配置文件如果没有就是默认配置。

image-20230104200349178

当前我们是没有配置文件的所以需要手动创建一个

[lx@VM-4-3-centos ~]$ touch .vimrc

image-20230104200541110

现在 .vimrc 就是当前用户的配置文件。一个用户对应一个 vim 配置如果只对当前用户进行配置是不会影响其他用户的

使用 vim .vimrc 打开配置文件进行相关配置保存并关闭后打开 vim 这些配置会立马生效。

例如我们随意进行一些配置

set nu
syntax enable
set cursorline
set expandtab
set tabstop=4
set shiftwidth=4
set smarttab
set autoindent
set encoding=utf-8
set termencoding=utf-8
set smartindent
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {}<ESC>i
inoremap < <><ESC>i  

这些可以完成一些基本配置但是还是有一些问题的比如成对大括号出现无法智能缩进等…

如果想要自定义配置的好的话可以去查找一下资料研究一下配置出自己心仪的 vim 虽然过程可能比较繁琐但是一切都是为了自己的写代码时的舒适度。

博主是比较懒惰对于一些细节要求也不多所以采用的是第二种配置方案。

自动化配置

这种就是博主使用的配置方案。

某神为了解决小白在配置 vim 时十分繁琐的问题于是在 gitee 中上传了一份自动配置方案。唯一的缺点是该配置当前只支持 centos 7 版本而博主也十分幸运恰巧就是这个版本。

首先打开 gitee 搜索 vimforcpp 打开后往下划或者直接点击 [该链接] 直接跳转。

然后看到安装方法

image-20230104202308777

复制框起来的指令到 Linux 终端

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

然后敲击回车输入 root 账号密码即可开始安装安装界面

image-20230104202431130

输入密码等待安装成功后根据提示输入

source ~/.bashrc

就可以开始使用了~

该配置支持代码高亮智能补齐、缩进和语法提示等多种功能不可谓不好用接下来就由我来演示一下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p0VIXFov-1672838062780)(https://anduin.oss-cn-nanjing.aliyuncs.com/vim%E6%BC%94%E7%A4%BA5.gif)]

版本正确的小伙伴们还在等什么赶紧使用起来

五、结语

相信看到这里的小伙伴已经对 vim 的基本使用和配置有一定了解了。开头提出的问题大家应该可以轻松回答出来。

但是我们这里只是带大家上手vim 还有很多操作使用好 vim 可以让 Linux 环境下的开发事半功倍。

所以 a n d u i n anduin anduin 也为大家找来了陈皓大佬的 “vim 练级文章” 有兴趣的小伙伴可以前去阅读

那么到这里本篇文章也就到此结束了我们下期见~

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux