最近在学习C语言,顺便就用vim做编辑器,让自己熟悉一下一些常见的操作及命令。

打开或者新建文件

在命令提示符后面输入:vim filename,如果filename这个文件存在,则vim会打开它,如果不存在,则vim会新建一个filename文件。

vim的三种模式

  • 一般模式
当我们用vim直接打开一个文件之后什么也不做,就进入了一般模式。在一般模式下,你可以对内容进行复制、删除、粘贴等操作,还可以在文件内快速跳转到不同的行及不同的列
  • 编辑模式
当你在一般模式下按下A,a,I,i,O,o,R,r这几个按键之一,就进入了编辑模式,此时你就可以愉快的输入内容了。
  • 命令模式
当你在一般模式下输入/:?这三个字符之一,就会进入命令模式,可以进行一些搜索查询、替换、读入文件内容、另存文件内容、显示行号、执行命令行指令以及保存文件、退出vim等操作。

这三种模式之间互相切换的规则如下:
vim三种模式之间的关系

用户只能从一般模式切换到编辑模式,或者从一般模式切换到命令模式,不能从编辑模式直接切换到命令模式。要想从编辑模式切换到命令模式,只能先按Esc键退出编辑模式,再按?/:这三个按键进入命令模式。

懒得画图了,盗用鸟哥的图
模式切换

一般模式中常用的操作

光标的移动
下面加粗的都是比较常用的按键
  • hjkl这四个按键或者←↓↑→这四个按键可以操作光标向左、向下、向上、向右移动。h对应着←,j对应着↓,k对应着↑,l对应着→。并且hjkl这四个按键在键盘上是从左至右依次排列的。nj或者nk表示从当前光标所在行向下或者向上移动n行,同理nh或者nl表示将光标向左或者向右移动n个字符。
  • n<enter>——表示将光标向下移动n行。
  • 0或者home键表示移动光标到行首,$或者end键表示移动光标到行尾
  • n<space>——n加空格键,表示将光标向右移动n个字符。
  • H——表示将光标移动到当前屏幕最上方那一行的行首,注意是当前屏幕显示的内容的第一行,而不是文档的第一行。
  • M——则表示将光标移动到当前屏幕最中间那一行的行首。
  • L——表示将光标移动到当前屏幕最下面那一行的行首。
  • nG——表示将光标移动到当前文档的第n行。
  • 1G——表示将光标移动到当前文档的首行。
  • G——表示将光标移动到当前文档的末行。
  • gg——也是将光标移动到当前文档的首行。
  • ctrl+f(或者PageDown)——屏幕向下移动一页
  • ctrl+b(或者PageUp)——屏幕向上移动一页
删除、复制与粘贴
删除
  • x,X——x表示向后删除文字,从当前光标所在文字开始向后删除一个文字,连续按键则连续向后删除。X则正好相反,是往前删除一个文字。nx,nX则表示向前或者向后删除n个文字,以当前光标所在文字为起点。
  • dd——删除光标所在的当前这一行
  • ndd——从光标所在这一行往下删除n行(包括光标所在这一行)
  • d1G——删除光标所在这一行到首行之间的所有行(包括光标所在的行及首行)
  • dG——删除光标所在行到末行的所有行(同上)
  • d0——删除光标所在字符到行首字符之间的所有字符
  • d$——删除光标所在字符到行尾字符之间的所有字符
复制(与删除非常类似,只是把d换成了y)
  • yy——复制光标所在行
  • nyy——从光标所在行往下复制n行(包括光标所在这一行)
  • y1G——复制光标所在这一行到首行之间的所有行(包括光标所在的行及首行)
  • yG——复制光标所在这一行到尾行之间的所有行(包括光标所在的行及尾行)
  • y0——复制光标所在字符到行首字符之间的所有字符
  • y$——复制光标所在字符到行尾字符之间的所有字符
粘贴
  • p(小写)——将已复制的数据粘贴到光标所在行的下一行
  • P(大写)——将已复制的数据粘贴到光标所在行的上一行
其他操作
  • u——撤销前一动作
  • ctrl+r——重做前一动作

指令模式中常见的操作

搜索与替换
  • /——在一般模式下,按下/键,就会进入搜索模式,/word就会从当前光标所在位置向后搜索关键字word
  • ?——在一般模式下,按下?键,就会进入搜索模式,?word会从当前光标所在位置往前搜索关键字word
  • 注意,此处的往前搜索与王后搜索与n和N关系极大。当搜索一个关键字后,不论是往前还是往后搜索,文档中所有匹配的关键字都会高亮显示。当你搜索一个关键字之后,按下n,则继续进行前面的搜索动作,即如果你是往后搜索(/),那么按下n就继续往后搜索,光标会往后走到达关键字,继续按则继续走,而按下N,则按相反方向搜索,即继续往前搜索,光标往前走到达关键字上。同理,往前搜索时,按n继续往前搜索,按N则往后搜索。n和N就是让你在被搜索到的所有关键字之间移动光标
  • 搜索时,所有匹配的关键字都会被高亮显示,当你退出搜索模式或者再次打开文件时,仍然会高亮显示,此时我们可以主动关闭高亮显示
`:nohlsearch` 或者 `:set nohlsearch`可以关闭高亮显示,不过他们有些细微的区别,`:nohlsearch`会关闭本次高亮显示,当你下次搜索时,会继续让关键字高亮显示。而`:set nohlsearch`则会彻底关闭高亮显示,以后再次搜索时不会有高亮,在这种情况下,可以使用`:set hlsearch`恢复高亮显示。
  • :n1,n2s/word1/word2/g——这是字符串替换指令,n1代表起始的行号,n2代表结束的行号,word1为被替换的关键字,word2则是用来替换的关键字,g表示全局替换即n1daon2之间匹配的所有word1都被替换为word2。这条指令的意思就是,在第n1-n2行之间搜寻word1并将其替换为word2。
  • :1,$s/word1/word2/g——这条命令则是在第一行到最后一行搜索并替换。$表示最后一行。
  • :n1,n2s/word1/word2/gc——在后面加上c,会让你在替换每一个Word1之前确定是否替换,以防误删。
  • 如果没有g,则只替换匹配到的第一个关键字。
读写文件及保存退出
  • :w——保存当前编写的内容
  • :w!——当文件为只读文件时,强制写入,具体能否写入还要看用户的权限
  • :q——退出vim
  • :q!——强制退出。如果文件被修改了,则不保存退出。
  • wq——保存并退出
  • ZZ——如果文件被修改过,则保存之后退出,如果文件没有被修改,则直接退出。
  • w newFileName——将文件另存为
  • n1,n2 w newFileName——将文件n1-n2行之间的内容另存为一个新文件
  • r newFileName——将newFilename这个文件的内容读取并添加到当前光标所在行的后面
  • ! command——即在没有退出vim的状态下执行Linux指令,指令输出内容下面会有提示,按enter或者其他按键回到vim界面。
  • set nu——显示行号
  • set nonu——不显示行号

vim的暂存档.filename.swp

当你使用vim创建一个文件或者编辑一个文件时,系统就会自动创建一个隐藏文件,.filename.swp(也叫交换文件或暂存文件),如果你正常退出vim,则该文件会被自动删除。如果你没有正常退出导致正在进行的工作没有保存,则该文件就会保留下来,用来进行文件恢复。该文件会保存用户对文件内容的操作,以便用户恢复。

当文件没有正常退出保存,则再次打开时,会弹出下面的画面:
image
下面就分别来说说:
文字接口显示的是英文,我的系统语言选的是中文,上面的图片是在图像界面下的终端里截取的,因此显示的是中文,下面统一用英文,其意思都一样。

  • [O]pen read-only:以只读方式打开,一般用在你只想看看文件内容而不想编辑时。这种情况正对应上面图片中的有人正在编辑文件,而你打开文件就会弹出这六种可选操作,此时可以选择只读。
  • [E]dit anyway:以正常模式打开文件进行编辑,这样不会载入swp文件内容。这样会出现两人同时改变文件,而可能出现有的操作没有保存的情况。
  • [R]ecover:加载暂存文件,恢复当前文件。文件恢复后,暂存文件不会自动删除,需要用户手动去删除,否则下次打开文件还是会弹出这六种操作的界面。也可以在下次打开文件时选择[D]elete操作删除暂存文件。
  • [D]elete:删除暂存文件。如果你确定不需要暂存文件的内容,则可以选择这个操作删除它。
  • [Q]uit:直接退出vim。
  • [A]bort:类似[Q]uit,也是退出vim。
当文件多次编辑时出现不正常关闭情况,就会产生多个暂存文件(如果你没有删除暂存文件的话)。比较新的文件依旧以.swp结尾,次一级的以.swo结尾,再次一级的以.swn结尾,其他的依次类推。即文件后缀最后一个字母按照字母顺序出现,越靠后的字母,表示暂存文件越新,最新的就是以p结尾的.swp文件。

vim高级操作

区块选择

区块选择也是在一般模式下进行的操作。具体操作见下图:
image

  • 小写的v,以字符为单位进行选择,你可以用上下左右键移动光标选择不同的形状与大小,选中的是光标初始位置与结束位置之间的所有字符。
  • 大写的V,则是以行为的单位进行选择,默认选中当前行,可以用上下键移动光标选择多行,选中的使光标初始位置与光标结束位置之间所有的行。
  • ctrl+v:会选中初始光标位置与结束光标位置之间的矩形框,如果初识光标与结束光标不在同一列,则这两个光标位置就处于一个矩形框的对角位置,以他俩为对角线的矩形框整个会被选中。如果开始光标与结束光标在同一列,则选中这两光标之间的所有的行上光标所在列的字符。效果如下:

image
image
当选中文字之后,可以进行以下操作:

  • 小写y:复制选中的文字,复制之后vim会自动回到一般模式。
  • 小写的d:删除选中的文字,删除之后会自动回到一般模式。
  • 小写的p:其实就是一般模式下的粘贴操作,这个必须在一般模式下进行。将复制的内容粘贴到光标所在行的下面。顺便复习一下大P,是将复制的内容粘贴到光标所在行的上面。
多文件编辑

在vim后面接多个文件名,可以同时打开多个文件。这样就进入了多文件编辑。多文件编辑时常用的按键如下:
image

* :files :显示当前打开的文件列表
image

  • :n:切换到下一个文件
  • :N:切换到上一个文件
  • 这两种切换进入的都是一般模式
多窗口操作

在Windows下很多文本编辑器都有多窗口功能,当一个文件太大来回查看不方便时,就可以将一个文件在多个窗口打开,每个窗口显示想要看到的那一部分,免去了来回拖动页面的烦恼。
或者想要同时看到或者编辑多个文件,此时也可以使用多窗口功能,而不用点击标签切换文件,windows中的效果如下,以vscode为例:
image
image
在vim中,也可以将文件多窗口显示。使用:sp命令即可分割窗口。
image
使用:sp fileName命令则会在新窗口中打开fileName这个文件,从而实现多文件多窗口。
image
打开了多个窗口,那么如何在多个窗口键切换呢?常用的命令如下:
image
补充一下:ctrl+w+q离开的是当前光标所在的文件,即离开的是你当前正在编辑的文件,这个命令是和:q等价的,当你在命令行直接输入:q,则离开当前正在编辑的文件。

补全功能

许多编辑器都有命令补全功能,当你输入相应的关键字,会联想出一个命令列表,供读者选择,这样能大大提高coder的编码效率。在vim中也有相关功能。

  • 根据文件扩展名来补全相关的命令。即vim会根据文件扩展名来确定文件使用的语法,从而提示用户相应的关键词或者命令,这种功能在可视化编辑器中很常见,即会显示一个关键字列表以供用户选择。使用的按键是ctrl+x -> ctrl + o,即先按下ctrl+x,然后再按下ctrl+o即可调出关键词列表。下面以a.css文件来示例:

image
在出现命令列表之后,可以用上下按键选择命令,最终按enter就输入了命令。

  • 根据文件内容来补全相关命令。即你在一个文件中多次输入同一个关键字,那么在你再次输入时,只要输入这个关键词的首字母,然后使用按键ctrl+x -> ctrl + n即可补全该关键字,免去了重复输入的痛苦。

image
image

  • 以当前文件所在目录内的文件名作为关键字进行补全。使用按键ctrl+x -> ctrl + f,则会以当前文件所在目录内的文件名作为关键字进行补全,对于一些文件操作比较方便。
第二张图中描述有误,应该是ctrl+x -> ctrl+f,而不是ctrl+x -> ctrl+x
image
image

vim的环境设定

image
上面的指令只是临时设定,如果想要长期生效的话可以创建自己的配置文件。关于vim的配置文件有两个,一个是系统的配置文件/etc/vimrc,还有一个就是用户自己的配置文件,放置在home目录下,即~/.vimrc文件,文件预设不存在的,请手动创建。配置文件相关语法示例如下:
image
顺便提一下,用户在vim中的操作都被记录在~/.viminfo这个文件中。

至此,vim的常用功能就此介绍完毕,文章中有错误之处,还望不吝指教,谢谢各位的阅读。


阿料
1 声望4 粉丝

一个平凡的coder