(一) 什么是 Vim

在我看一本书的时候,有一句话印象很深刻,“在Linux系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数”,所以我们需要学习一种文本编辑工具也就是今天的 Vim,那么什么是 Vim 呢?

Vim是从vi发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器

也就是说 Vim 是从 Vi 发展而来的,但是却功能更加的完善以及强大,你将它理解一个可扩展的编辑器就可以了,因为它的功能强大,甚至可以扩展后作为 IDE 使用,不过作为入门,我们首先要学会其基本用法

注:当然编辑器还有很多种例如 Vim、emacs、pico、nano 等,有兴趣可以自行了解

(二) Vim 安装

首先,很多 Linux 的发行版系统,通常都已经默认安装好了 vi 或 Vim 文本编辑器,例如 CentOS,今天演示的机器是一台 Ubuntu-18.04.1 的版本,它默认是没有 Vim 的,如果直接使用会显示找不到命令,如下显示:

Command 'vim' not found, but can be installed with:

apt install vim       
apt install vim-gtk3  
apt install vim-tiny  
apt install neovim    
apt install vim-athena
apt install vim-gtk   
apt install vim-nox 

所以可以根据提示通过简单的命令进行安装:apt install vim (关于安装系列的命令会在后面的文章中介绍)

可以输入 vim --version 看一下有没有返回信息判断是否安装成功

(三) Vim 的三种模式

(1) 命令模式

此模式下可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作,下图为 Ubuntu-18.04.1 图形界面下 Terminal 的一个演示场景

说几个非常常用的命令:

  • i键 切换到输入模式,以输入字符
  • Esc键 切换到命令模式
  • :键 切换到末行模式,以在最底一行输入命令。

如果你想要编辑点什么:启动 Vim,进入到文件就进入了命令模式,按下i键,切换到输入模式,按Esc键切换到命令模式,再按:键切换到末行模式,执行保存退出,或者直接退出等命令

(2) 输入模式

输入模式,就是普通的文本录入,例如我在下例中,在命令模式下输入了 i 进入了输入模式,然后输入了上述文本

当然了,输入模式的命令有很多,摘一些常用的出来,首先是关于文本插入的

命令 功能描述
i 在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动
I 在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符
o 在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本
O 在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本
a 在当前光标所在位置之后插入随后输入的文本
A 在光标所在行的行尾插入随后输入的文本,相当于光标移动到行尾再执行a命令

再有就是一些别的常用的

命令 功能描述
dd 删除(剪切)光标所在整行
5dd 删除(剪切)从光标处开始的5行
yy 复制光标所在整行
n 显示搜索命令定位到的下一个字符串
N 显示搜索命令定位到的上一个字符串
u 撤销上一步的操作
p 将之前删除(dd)或fuzhi(yy)过的数据粘贴到光标后

还有就是使用上下左右键移动键盘,然后 Ecs键 切换到命令模式

(3) 末行模式

编辑模式主要用于对文件进行保存或者退出等等操作

使 Vim 切换到编辑模式的方法是在命令模式状态下按“:”键,此时 Vim 窗口的左下方出现一个“:”符号,这是就可以输入相关指令进行操作了

命令 作用
:w 保存文件
:q 退出程序
:q! 如果无法离开Vim,可以使用此命令强制退出Vim编辑器
:wq! 保存文件并退出编辑器
:wq! 保存文件并强制退出编辑器
:x 保存文件并强制退出编辑器,其功能与:wq!相同
: set nu 显示行号
: set nonu 不显示行号

(四) 编辑文件

上面虽然讲解了三种模式,其实如果只是针对一些普通的配置,其实上面所讲的内容已经够用了,但是如果想更加行云流水般的对文本内容进行操作就需要再多学习一些命令

(1) 打开文件

首先编辑之前当然是打开文件,如果我们已经存在某个文件,就可以直接进入,如果没有此文件,则会先创建再进入,例如下面的意义,就是进入 demo.txt 的编辑模式

root@ubuntu:~# vim demo.txt

这个时候,我们就可以通过比较常用的 i键 进入输入模式,就能编辑文本了

Vi 使用的选项 说 明
vim filename 打开或新建一个文件,并将光标置于第一行的首部
vim -r filename 恢复上次 vim 打开时崩溃的文件
vim -R filename 把指定的文件以只读方式放入 Vim 编辑器中
vim + filename 打开文件,并将光标置于最后一行的首部
vi +n filename 打开文件,并将光标置于第 n 行的首部
vi +/pattern filename 打幵文件,并将光标置于第一个与 pattern 匹配的位置
vi -c command filename 在对文件进行编辑前,先执行指定的命令

(2) 进行编辑

关于几种常见的插入文本的命令,在前面已经输入模式已经说过了,所以我们直接从查找开始说

A:删除文本

快捷键 功能描述
x 删除光标所在位置的字符
dd 删除光标所在行
ndd 删除当前行(包括此行)后 n 行文本
dG 删除光标所在行一直到文件末尾的所有内容
D 删除光标位置到行尾的内容
:a1,a2d 函数从 a1 行到 a2 行的文本内容

B:复制粘贴

快捷键 功能描述
p 将剪贴板中的内容粘贴到光标后
P(大写) 将剪贴板中的内容粘贴到光标前
y 复制已选中的文本到剪贴板
yy 将光标所在行复制到剪贴板,此命令前可以加数字 n,可复制多行
yw 将光标位置的单词复制到剪贴板

(3) 查找替换

A:查找

有一点需要注意的是,要查找的字符串要严格区分大小写

快捷键 功能描述
/abc 从光标所在位置向前查找字符串 abc
/^abc 查找以 abc 为行首的行
/abc$ 查找以 abc 为行尾的行
?abc 从光标所在为主向后查找字符串 abc
n 向同一方向重复上次的查找指令
N 向相反方向重复上次的查找指定

B:替换

快捷键 功能描述
r 替换光标所在位置的字符
R 从光标所在位置开始替换字符,其输入内容会覆盖掉后面等长的文本内容,按 “Esc” 可以结束
:s/a1/a2/g 将当前光标所在行中的所有 a1 用 a2 替换
:n1,n2s/a1/a2/g 将文件中 n1 到 n2 行中所有 a1 都用 a2 替换

例如,要将某文件中所有的 "root" 替换为 "ideal-20",有两种输入命令,分别为:

:1, $s/root/ideal-20/g
或
:%s/root/ideal-20/g
  • 第一种写法中,1,$ 代表到第一行到最后一行,如果写成 1,30 就是 1-30行
  • 第二种写法中 % 代表到第一行到最后一行
  • 如果不指定,就会在当前行生效

(五) 结尾

如果文章中有什么不足,欢迎大家留言交流,感谢朋友们的支持!

如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号

在这里的我们素不相识,却都在为了自己的梦而努力 ❤

一个坚持推送原创开发技术文章的公众号:理想二旬不止


二境志
191 声望26 粉丝