文章目录
LinuxVim文本编辑器
前言
Linux一切皆文件,所有的内容都是以文件的形式存储的,在命令行下更改文件内容时,会使用到文本编辑器,在所有的Linux 发行版上面都会有的一个叫vi的文本编辑器,并且很多软件默认也是使用vi做为它们的编辑工具,Vim是高级版的vi
Vi与Vim
Vi编辑器是类Unix系统最初的编辑器,它使用控制台图形模式来模拟文本编辑窗口,允许查看文件中的行、在文本中移动、插入、编辑和替换文本
Vim名称为"Vi improved",从名字就可以看出是由vi编辑器的改进升级和发展演变,Vim具有语法高亮显示、多视窗编辑、代码折叠、支持插件等功能,已经成为众多Linux发行版的标配
Vim的使用原因
几乎所有的Linux发行版都内嵌有Vim文本编辑器,但不一定会存在其他的编辑器
在使用Linux系统过程中,很多软件的编辑接口都会默认调用Vim编辑器,比如crontab、Visudo、edquota等命令
Vim具有编辑程序的能力,会主动利用不同的字体颜色辨别语法的正确性,方便程序设计
使用Vim文本编辑器会使得编辑速度更快
Vim三种工作模式
在使用Vim编辑器时,存在3种工作模式,分别是一般命令模式、编辑模式、命令行模式,一般命令模式可与编辑模式及命令行模式切换,但编辑模式与命令行模式不可互相切换

Vim命令模式
当使用Vi或Vim编辑文件时,即vi 文件名进入文件,工作模式默认为命令模式,在这个模式下可以使用方向键(上下左右)来移动光标, 还可以对文件内容进行复制、粘贴、替换、删除等操作,但是无法编辑文件内容
Vim编辑模式
在一般命令模式下可以进行删除、复制、粘贴的操作,但无法编辑文件内容,通过按键(i、I、o、O、a、A、r、R)可以从命令模式进入到编辑模式,通常进入编辑模式的方式会在界面的左下角显示进入的方式,从编辑模式退回至命令模式只需要按键(Esc)
Vim命令行模式
在一般模式下,通过输入(:/ ?)中任意一个键则可以使光标移动到最下面那一行,为命令行模式,在此模式下可以提供查找数据、读取、保存、批量替换字符、退出文件、显示行号等操作
Vim按键说明
命令模式
一般命令模式可用的功能按键说明可以分为:光标移动、复制粘贴、查找替换
光标移动
按键说明 | 移动光标方法 |
---|---|
h或左箭头键(←) | 光标向左移动一个字符 |
j或下箭头键(↓) | 光标向下移动一个字符 |
k或上箭头键(↑) | 光标向上移动一个字符 |
l或右箭头键(→) | 光标向右移动一个字符 |
[Ctrl] + f | 屏幕向下移动一页,等同于[Page Down] |
[Ctrl] + b | 屏幕向上移动一页,等同于[Page Up] |
[Ctrl] + d | 屏幕向下移动半页 |
[Ctrl] + u | 屏幕向上移动半页 |
n | 表示光标在改行向右移动n个字符 |
0或功能键[Home] | 移动到这一行的最前面的字符 |
$或功能键[End] | 移动到这一行的最后面的字符 |
H | 光标移动到这个屏幕上方第一行的第一个字符 |
M | 光标移动到这个屏幕中央那一行的第一个字符 |
L | 光标移动到这个屏幕下方那一行的第一个字符 |
G | 移动到文件的最后一行 |
nG | 移动到这个文件的n行 |
gg | 移动到这个文件的第一行 |
n | 表示向下移动n行 |
复制粘贴
按键说明 | 移动光标方法 |
---|---|
x与X | x为向后删除一个字符,X为向前删除一个字符 |
dd | 删除(剪切)光标所在的那一行 |
ndd | 删除(剪切)光标所在的向下n行 |
yy | 复制光标所在的那一行 |
nyy | 复制光标所在的向下n行 |
p与P | p将已复制的数据在光标的下一行粘贴,P是将已复制的数据在光标的上一行粘贴 |
u | 恢复前一个操作 |
[Ctrl] + r | 重复上一个操作 |
查找替换
按键说明 | 移动光标方法 |
---|---|
/word | 向光标之下寻找一个word的字符串 |
?word | 向光标之上寻找一个word的字符串 |
n | 向下重复前一个查找的操作 |
N | 向上重复前一个查找的操作 |
:n1,n2 s/word1/word2/g | 在第n1与n2行之间查找word1字符串,并将该字符串用word1字符串替代 |
:1,$ s/word1/word2/g | 在第一行与最后一行之间查找word1字符串,并将该字符串用word1字符串替代 |
:1,$ s/word1/word2/gc | 在第一行与最后一行之间查找word1字符串,并将该字符串用word1字符串替代时提示确认是否替换 |
编辑模式
编辑模式是由命令模式切换进入的工作模式,可以分为进入和退出操作
进入编辑模式
按键说明 | 移动光标方法 |
---|---|
i与I | i为目前光标处插入,I为目前所在行第一个非空格符处开始插入 |
a与A | a为目前光标的下一个字符开始插入,A从目前光标所在行的最后一个字符开始插入 |
o与O | o为在光标的下一行处插入新的一行,O从光标的上一行处插入新的一行 |
r与R | r为替换光标所在的字符一次,R会一直替换光标所在的文件直到按下Esc |
退出编辑模式
按键说明 | 移动光标方法 |
---|---|
[Esc] | 退出编辑模式,回到一般命令模式 |
命令行模式
命令行模式是由命令模式切换进入的工作模式,主要是保存退出操作
保存退出
按键说明 | 移动光标方法 |
---|---|
:w | 将编辑的数据写入到磁盘文件中 |
:q | 退出vim |
:q! | 强制退出不保存 |
:wq | 保存后退出,wq!表示为强制保存后退出 |
ZZ | 若文件没有修改则不保存退出,若修改则保存后退出 |
:w [filename] | 将编辑的数据保存至另一个文件 |
:r [filename] | 编辑内容时,将另一个文件的内容追加到光标后面 |
:n1,n2 w[filename] | 将n1至n2的内容保存到filename这个文件中 |
Vim多文件编辑
在编辑文件时,有时需要参考另一个文件,如果在两个文件之间进行切换则比较麻烦。可以使用 Vim 同时打开两个文件,每个文件分别占用一个窗口,切换到另一个文件窗口,可以按 “Ctrl+WW” 快捷键
例如,在査看test2.c 时需要参考test3.c,有两种办法可以实现:
- 先使用 Vim 打开第一个文件,接着输入命 令 “:sp./test3.c” 水平切分窗口,然后按回车键;如果想垂直切分窗口则可以输入 “:vs./test3.c”;
- 可以直接执行命令"vim -o 第一个文件名 第二个文件名",也就是 “vim-o test2.c test3.c”

Vim配置文件(.vimrc)详解
Vim 启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim
Vim 配置文件分为系统配置文件和用户配置文件:
- 系统配置文件位于 Vim 的安装目录(默认路径为 /etc/.vimrc);
- 用户配置文件位于主目录 ~/.vimrc,即通过执行
vim ~/.vimrc
命令即可对此配置文件进行合理修改。通常情况下,Vim 用户配置文件需要自己手动创建
注意,Vim 用户配置文件比系统配置文件的优先级高,换句话说,Vim 启动时,会优先读取 Vim 用户配置文件(位于主目录中的),所以我们只需要修改用户配置文件即可(不建议直接修改系统配置文件)
Vim环境设置参数
设置参数 | 功能描述 |
---|---|
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936 set termencoding=utf-8 set encoding=utf-8 | 设置编码格式,encoding 选项用于缓存的文本、寄存器、Vim 脚本文件等;fileencoding 选项是 Vim 写入文件时采用的编码类型;termencoding 选项表示输出到终端时采用的编码类型。 |
set nu set number | nu 是 number 的缩写,所以上面两个配置命令是完全等效的,二选一即可。取消行号可使用 set nonu。 |
set cursorline | 突出显示当前行。 |
set mouse=a set selection=exclusive set selectmode=mouse,key | Vim 编辑器里默认是不启用鼠标的,通过此设置即可启动鼠标。 |
set autoindent | 设置自动缩进,即每行的缩进同上一节相同。 |
set tabstop=4 | 设置 Tab 键宽度为 4 个空格。 |
在 Vim 编辑模式中,通过 “:set nu” 命令也可以让 Vim 显示行号,但只是临时有效,下次使用 Vim 编辑文件还是不显示行号。而本节介绍的编辑配置文件设置 Vim 的方式,对 Vim 的设置是永久的
Vim中执行Linux 命令
Vim 编辑器不仅提供了大量的命令来方便和加快我们的文件编辑工作,在此编辑器中,我们还可以直接使用 Linux 命令来进一步提高文件编辑的效率,这就是 Vim 编辑器的所谓过滤功能
由于 Vim 编辑器中支持直接执行 Linux 命令,从而可以方便快捷地对文件完成以下操作:
-
将一个命令的输出结果存入正在编辑的文件;
-
将正在编辑的文件中的一些数据作为某个指定 Linux 命令的输入
首先在新建的demo.txt文件中输入https://www.baidu.com/
然后在命令模式下输入!!,界面左下角会出现:!.等信息,这就表明可以输出Linux命令
提示信息. :表示从目前光标开始,!表示为后续执行Linux命令,命令执行结果插入到光标所在行的位置
输入Linux命令date,进入命令模式时光标默认在第一个字符,执行date命令得出的结果将原本的文本值:https://www.baidu.com/进行了覆盖
Vim执行Linux命令的方式
格式 | 功能 |
---|---|
:!命令 | 直接运行一个 Linux 命令,运行完毕之后,即可返回到 Vim 中。 |
:w!命令 | 将 Vim 中所有的文本内容作为指定命令的输入。但命令的执行结果不会写入到当前文件中。 |
:r!命令 | 将命令执行的结果写入到当前 Vim 中,例如 :!ls 表示将 ls 的执行结果输入到 Vim 中。 |
:nr!命令 | 其中 n 为数字,表示将命令的执行结果写入到 Vim 第 n 行的位置。例如,:3r!date 表示将 date 命令的执行结果写入到第 3 行文本处。 |
:n,m!命令 | 其中 n 表示起始行号,m为结束行号,功能是将 Vim 中指定的部分文本作为某个命令的输入,同时将命令的输出也插入到当前指定的位置。 |
:n,m w!命令 | 其中 n 表示起始行号,m为结束行号,其功能是 Vim 中指定的部分文本作为某个命令的输入,但命令的执行结果不会写入到文件中。 |
!!date | 向 Vim 中插入当前时间。 |
总结
Vim是vi improved,是针对vi的升级演变,Vim可以编辑shell脚本、配置文件等,存在三种工作模式:命令模式、编辑模式、命令行模式,vim的环境设置可以写入~/.vimrc文件中,同时Vim可以执行Linux命令
赶紧学习起来吧!我是一个正在努力找回自我的人,希望能和一起学习的人成长,有错误的地方请各位大佬帮忙指正,如果觉得有帮助就点个赞当作对我的一个小肯定❤,peace&love