目 录
- 1 vim的基本概念
- 2 vim的基本操作
- 3 vim常用模式命令集
- 3.1 vim正常模式命令集
- 3.2 vim末行模式命令集
- 4 vim的简单配置
1 vim的基本概念
vim编辑器与vi编辑器一样都是多模式编辑器,不同的是vim编辑器是vi编辑器的升级版本,vim不仅兼容vi的所有指令,而且还添加了许多新的特性。例如语法加亮,其可视化操作不仅可以在终端上运行,也可以运行于x window、mac os、Windows。
不同于vs2022等集编辑、调试、编译、运行等于一身的集成开发环境(IDE),vim编辑器就是单纯的文本编辑器,当然,如果经过一定配置,也可以使vim集多功能于一声,但通常我们还是将vim作为编辑器使用。
vim编辑器常用的三种模式:
(1)正常 / 普通 / 命令模式(Normal mode / Command mode)
功能: 控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入 Insert mode
或 Last line mode
。
(2)插入模式(Insert mode)
功能: 只有在 Insert mode
下才可以进行文字输入,通过按 [ESC]
键可以回到命令模式。
(3)末行模式(Last line mode)
功能: 文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下时,可以通过 :
(即按下 shift 与 :
) 进入末行模式。如果想要查看所有模式,可以在vim编辑器的末行模式下直接输入命令:help vim-modes
即可。
如下图所示:这里vim编辑器一共有12种模式,包括六种基础模式和六种额外模式:six BASIC modes
和 six ADDITIONAL modes
2 vim的基本操作
通过输入命令:
vim 文件名
即可打开vim编辑器编辑对应文件,如果对应文件不存在,将会创建一个新的同名文件,但需要注意的是,如果退出时没有保存,这个新文件不算被真的创建,即退出vim编辑器后文件将不复存在。当我们进入vim编辑器时,默认一开始处于 命令模式 ,如果要输入文字,应当先切换到插入模式。
vim三种常用模式间的切换:
(1)正常模式切换至插入模式
- 输入 a(按字母键 a ):从光标当前位置的下一个位置开始输入文字;
- 输入 i(按字母键 i ):从光标当前位置开始输入文字;
- 输入 o (按字母键 o ):插入新的一行(空行),从行首开始输入文字
(2)插入模式或末行模式切换至正常模式
- 按
[ESC]
键切换至正常模式,当在插入模式中输入错误而需要删除相应内容时,除了可以在插入模式下直接删除外,还可以在正常模式下通过命令删除。
(3)正常模式切换至末行模式
- 按
[shift 与 ;]
,等同于输入[:]
即可切换至末行模式
vim编辑器的退出及文件保存:
在正常模式下,按冒号键 [:]
进入末行模式(Last line mode):
- 输入 w :保存当前文件
- 输入 wq :保存当前文件并退出vim编辑器
- 输入 q! :当使用vim打开文件并进行过内容更改后,如果不保存直接在末行模式下输入:q 退出,可能会提示
E37: No write since last change (add ! to override)
并且不允许退出,此时如果确认不需要保存更改后的文件而直接退出,输入:q! 即可不存盘强制退出vim编辑器。 - 输入 wq! :当使用vim编辑器打开某些重要文件并进行过内容更改后(例如以root用户身份打开对所用用户均最多只有可读权限的文件并进行修改),如果直接在末行模式下输入:wq 保存文件并退出vim,可能会提示
E45: 'readonly' option is set (add ! to override)
并且不允许退出,此时如果希望保存对这个重要文件的更改再退出,输入:wq! 即可强制存盘并退出。
注意事项:
- 如果不知道当前处在什么模式下,可以按
[ESC]
键,最终都会回到正常模式下,接着可以再从正常模式切换至其它模式。 - 退出vim编辑器的时候,一般要先保存再退出。
- 在vim中操作时,尽量不要使用鼠标及其上的滚轮,因为如果直接用鼠标或滚轮拉动编辑框的话,可能会将编辑框拉动到不属于vim编辑器范围的地方,而显示出不属于当前被编辑文件中的内容(可能是之前的Linux下输入的一些指令),如下图所示。
3 vim常用模式命令集
3.1 vim正常模式命令集
(1)光标移动
- vim中可以直接使用键盘上的上下左右键来移动光标,但正规的vim是用小写英文字母(注意大写锁定不能打开)
[h]
、[j]
、[k]
、[l]
来分别控制光标 左、下、上、右 的移动。 - 按
[G]
:移动光标至文件最后,可以以shift + g
的方式输入G
,也可以通过打开大写锁定输入G
。 - 按
[$]
:移动光标至当前所在行的行尾。 - 按
[^]
:移动光标至当前所在行的行首(如果有前置空格,则是移动到当前行第一个非空字符上)。 - 按
[#l]
:移动光标至该行的第#
个位置,如: 5 l , 26 l \pmb{5l,26l} 5l,26l 。 - 按
[ctrl + g]
:列出光标所在行的行号信息,如下图所示。
- 按
[#G]
:移动光标至文件第#
行行首,如:5G 表示移动光标至文中第5行行首(前置空格不算,至该行第一个非空字符)。 - 按
[w]
:以单词为单位,移动光标至下一个单词的首字符处;[#w]
则表示移动光标至后#
个单词的首字符处。 - 按
[b]
:以单词为单位,如果光标位于当前单词的首字符处,则移动光标至前一个单词的首字符处;如果光标位于当前单词的非首字符处,则移动光标至当前单词的首字符处;[#b]
中的#
则表示移动步长。 - 按
[e]
:以单词为单位,如果光标位于当前单词的尾字符处,则移动光标至下一个单词的尾字符处;如果光标位于当前单词的非尾字符处,则移动光标至当前单词的尾字符处;[#e]
中的#
则表示移动步长。 - 按
[gg]
:移动光标至文件起始位置(起始第一个非空字符处)。 - 按
[ctrl + b]
:屏幕往后(下)移动一页,即可显示前一页的内容。 - 按
[ctrl + f]
:屏幕往前(上)移动一页,即可显示后一页的内容。 - 按
[ctrl + u]
:屏幕往后(下)移动半页,即可显示前半页的内容。 - 按
[ctrl + d]
:屏幕往前(上)移动半页,即可显示后半页的内容。
(2)文字删除
[x]
:行内删除,每按一次,删除光标所在位置的一个字符(直到该行所有字符被删除,不可再删,也不会跳到其它行进行删除)。[#x]
:行内删除,表示删除包括光标所在位置在内的其后#
个字符。[X]
:行内删除,每按一次,删除光标所在位置的前一个字符。[#X]
:行内删除,表示删除光标所在位置的前#
个字符(不包括光标所在位置)。[dd]
:删除(剪切)光标所在行,如果将被删除行再进行粘贴,则表示对该行的剪切,否则就只是删除。[#dd]
:对包括当前光标所在行在内的向下(后)#
行进行删除(剪切)。
(3)内容复制
[yw]
:以单词为单位(汉字以单个字符为分界),将包括光标所在位置在内到词尾的字符复制到缓冲区。[#yw]
:以单词为单位,将包括光标所在位置的字符开始往后的#
个词复制到缓冲区。[yy]
:复制光标所在行到缓冲区。[#yy]
:复制包括光标所在行在内的其后#
行内容到缓冲区。[p]
:将缓冲区中的内容从光标所在处开始向后粘贴;[#p]
表示将缓冲区中的内容粘贴#
次。所有与y
有关的复制命令都必须配合p
才能完成完整的复制粘贴功能。
(4)内容替换
[r + 字符]
:以 r 之后跟着的字符替换光标所在处的字符;[#r + 字符]
表示以 r 之后跟着的字符替换包括光标所在处在内的其后#
个字符。[R + 字符]
:替换光标所到之处的字符,直到按下[ESC]
键为止。
(5)操作撤销与恢复
[u]
:如果误执行了一个命令,通过按下[u]
可以回到执行该命令前的状态,多次按[u]
可进行多次撤销。[ctrl + r]
:如果误撤销,可以通过[ctrl + r]
恢复撤销。
3.2 vim末行模式命令集
在使用末行模式之前,先按
[ESC]
键确认回到正常模式下,再按[:]
进入末行模式。
(1)显示行号
- 输入
set nu
:在文件中的每一行前面列出行号,如下图所示。
- 输入
set nonu
:取消行号显示。
(2)将光标跳转到文件中某一行行首并在当前界面中显示出该行
- 输入
[#]
:[#]
表示一个数字,在末行模式下输入一个数字,再按回车键就会跳转到该行并显示,如:在末行模式下输入 17 就会跳转到文件中第 17 行。注意:在末行模式下不要使用小键盘输入,可能会进入插入模式,因此需要使用大键盘上的数字进行输入。
(3)字符(串)查找
[/字符(串)]
:先按[/]
键,再输入想要查找的字符(串),如果第一次找到的关键字不是目标关键字,可以一直按[n]
键,会往后
查找到目标关键字为止。[?字符(串)]
:先按[?]
键,再输入想要查找的字符(串),如果第一次找到的关键字不是目标关键字,可以一直按[n]
键,会往前
查找到目标关键字为止。
(4)内容替换
- 输入
%s/(替换前内容)/(替换后内容)/g
:将某部分内容全部替换为目标内容,其中g
(global) 表示全部替换(如下图示例所示)。
(5)不退出vim,执行Linux命令行命令
[! command]
:在末行模式下,输入如:! ls -l
、! gcc test01.c -o test01
等命令(在原命令前加上!
),即可在不退出vim的情况下执行相应命令(如下图所示为在末行模式下输入! ls -l
且执行后的显示结果),再通过按回车键[ENTER]
回到vim编辑器中。
(6)分屏编辑多个文件
- 输入
vs filename
:通过输入vs filename
命令可实现vim编辑器的分屏编辑,如果当前文件 filename 不存在,则会新建一个同名文件并打开,如果退出时保存了该文件,则表示其被真正创建,如果没保存就直接退出vim,则该文件不算被创建,退出vim后依旧不存在。在vim分屏编辑下,光标在哪就表示正在编辑哪个文件(如下图所示)。 - 按住
ctrl
的同时双击w
可以切换编辑当前分屏下不同的文件;在对应文件编辑下输入wq
即可依次结束该文件的分屏编辑。
4 vim的简单配置
- 一个用户对应一个vim配置,当前用户所作的配置不会影响其它用户,当切换到不同用户时,如果该用户没有进行过配置,则需再次配置。
- vim配置的是通过设置配置文件及安装相关插件来实现的。
配置文件的位置:
- 在目录/etc/下有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
- 在每个用户的家目录下,都可以建立自己私有的配置文件,命名为
.vimrc
。例如:/root目录下,或者用户jml
家目录下/home/jml
。 - 通过命令
su 用户
切换用户为想要进行vim配置的用户,进入该用户的家目录下(可以通过命令cd ~
进入)。 - 打开家目录下创建好的
.vimrc
文件,执行命令vim .vimrc
,进入vim编辑器中编辑配置文件。
常用配置选项举例:
- 设置语法高亮:syntax on
- 显示行号:set nu
- 设置缩进的空格数为4:set shiftwidth=4
- 突出显示当前行:set cursorline
设置结果如下图所示:
这里只以几个例子做简单介绍,如果想进行更多配置可再搜索相关命令添加到配置文件 .vimrc
中。当然,如果想配置出更好看的vim,原生的配置功能可能不全,需要选择安装相关插件来完善配置,这里就不做具体讲解。
以上是我对Linux中vim编辑器相关知识的一些学习记录总结,如有错误,希望大家帮忙指正,也欢迎大家给予建议和讨论,谢谢!