【Linux】文本编辑器-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 modeLast line mode

(2)插入模式(Insert mode)

功能: 只有在 Insert mode 下才可以进行文字输入,通过按 [ESC] 键可以回到命令模式。

(3)末行模式(Last line mode)

功能: 文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下时,可以通过 : (即按下 shift 与 : ) 进入末行模式。如果想要查看所有模式,可以在vim编辑器的末行模式下直接输入命令:help vim-modes 即可。

如下图所示:这里vim编辑器一共有12种模式,包括六种基础模式和六种额外模式:six BASIC modessix ADDITIONAL modes

vim模式


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] :列出光标所在行的行号信息,如下图所示。

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编辑器相关知识的一些学习记录总结,如有错误,希望大家帮忙指正,也欢迎大家给予建议和讨论,谢谢!

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大米饭_Mirai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值