如此强大的Vim,而我却只会插入和保存!

1,546 阅读8分钟

前言

使用Linux是避不开要使用Vim命令的,不像Windows下那样,可以使用鼠标就可以完成复制、粘贴、删除操作,而在这个黑色背景的控制台文本编辑器下,是不是感到困惑,鼠标貌似也起不到什么作用,取而代之的是众多命令。但是Vim控制台编辑器确实是最好的文本编辑器,所以,学习Linux,一定要学习一下Vim。

另外还有个命令是Vi,他两就差一个字母,也是用来编辑文本的,那么到底有什么区别呢?

Vi代表Visual,即可视化编辑器,Vim是Vi Improvement的缩写,Vim具有Vi所没有的许多功能,虽然他们很相似,但是,Vim在Vi编辑器上增加了一些附加功能,也代表他更强大,但是需要注意的是,每个Linux虽然版本不同,但都安装了Vi,而有些却没有安装Vim,需要手动安装,拿Ubuntu举例,安装命令是sudo apt install vim

不同点如Vim编辑器可以多级撤消,如果不小心删除了四行文本,则可以撤消这四个删除操作,Vi编辑器则不支持多级撤消,只能撤消最后一次。

下面是一些常用到命令。

常用编辑命令

启动

在控制台输入vim命令即可启动,vim有多种模式,分为正常模式、插入模式、命令模式、可视化模式,在第一次执行vim或者打开文件时,就是正常模式,在窗口左下角就能查看编辑器的当前模式,下面是各模式之间切换步骤。

  1. 正常模式:第一次执行的状态
  2. 插入模式:按i、a、o、I、A、O
  3. 命令模式:在正常模式下按Esc输入冒号":"
  4. 可视化模式:按v或者Ctrl-V键选择块的状态

打开文本

已存在test.txt文件,通过 vim 文件名即可打开,在正常模式左下角会显示文件名,开头的行表示空行。

vim test.txt 

切换插入模式

在正常输入下输入i、a、o、I、A、O即可变为插入模式,此时可以在光标所在的位置插入字符。如果想结束,按下Esc即可返回正常模式。

移动字符

在正常模式下按h(左)、j(下)、k(上)、l(右)可以移动光标位置,也可以使用箭头方向键。

删除字符

在正常模式下,将光标移动到需要删除的字符位置,按下x键就可以删除1个字符,我们知道删除键有两个,Backspace和Delete,前者用来删除光标前面的,后者用来删除光标后面的字符,而在正常模式下按x,是删除光标后面的。

撤销

如果误删除某个字符或语句,想回到原内容,此时可以使用Undo命令,在正常模式下输入"u"可以回到上一个状态。

删除行、添加行

如果想删除当前光标所在的行,在正常模式下输入"dd"就能删除,删除后如果后悔,可按下"u"键还原,另外"dd"删除的行保存在缓冲,可以使用"p"键粘贴。

添加空行可以在插入模式下将光标移动到行尾,按下Enter键即可,但是还有其他办法,在正常模式下,按"o"键即可在光标位置的下面插入一行,按下"O"(大写o)即可在光标位置上面插入一行。

下面是删除、插入的一些命令:

1. a
从当前光标位置的下一个位置起插入字符。

2. A
从当前光标所在行尾起插入字符。

3. i
从当前光标位置起插入字符

4. x、dl
删除当前光标位置的字。

5. X、dh
删除当前光标上一个位置的字

6. dw

删除一个词

7. d0

从光标位置起删除至首行。

8. dd
删除整个光标所在行。

9. dj

删除光标所在行和下一行

10. dk
删除光标所在行和上一行


复制、粘贴

在正常模式下,按"yy"可以将光标所在行复制到缓存,但是这个复制也只能在当前编辑器中使用,不能粘贴到其他程序。

粘贴的话按下"p"键即可。

重复执行

有时候需要将相同的命令重复执行一定次数,此时,可以在需要执行的命令前加上次数就能重复执行,比如想让光标位置向下移动10个,即可输入10后在输入"j"。

如果要删除5个字符,那么可以按下5后在按"x"。

保存和终止

保存最快的方法可以按下Shift+zz,并且也会退出,否则,我们只能在命令模式下通过命令进行保存,进命令模式需要在正常模式下按":"。

  1. 保存更改

进入命令模式下输入w,然后回车。

  1. 保存为指定文件名

进入命令模式下输入w 文件名,然后回车。

  1. 强制保存

在w后面加上'!'可以强制保存文件。

  1. 保存并退出

进入命令模式下输入wq,即可保存并退出。也可以wq!进行强制终止。

移动到指定行号

如果想移动到指定行,那么首先要知道目标行号,但是默认的情况下是不显示行号的,但是可以通过命令让他显示,在命令模式下输入'set number'即可,或者是'set nu',然后在正常模式下输入nG就能移动到指定行,这里的n就是指定的行号,比如移动到10行,输入'10G'即可。

隐藏行号的在命令模式下输入"set nonumber"或者是"set nonu"即可。

移动一页

如果每次移动一个字符觉得太慢,那么可以通过以下命令进行半页、一页进行移动。

  1. Ctrl+F

移动到下一页

  1. Ctrl+B

移动到上一页

  1. Ctrl+D

向下移动半页

  1. Ctrl+U

向上移动半页

覆盖

如果有个单词拼错了,那么我们可以将光标移动到目标字符位置,删除后重新写,但是还有个办法,可以直接覆盖光标位置的字符。

如现在有个字符abccef,要将第四个c改写成d,可以将光标移动到第三个c后面,在正常模式下按下"rd"即可覆盖,当然也可以进行重复,按下"5rc",代表把光标位置后面的5个字符覆盖为"c"。

还可以使用"R",可以一直替换光标后面的字符。

合并行

如果想合并上下两行,可以按下"J"键,可以合并当前光标所在行和下一行,中间会通过空格分开。

大小写转换

在光标所在行按下"~"键即可将光标后面的字符进行大小写转换。

查找字符串

vim中查找字符串的方式很简单,在命令模式下输入"/"后在输入要查找的字符串即可。

如在文章中查找"天",即可输入"/天",要进行下一个字符时候按下"n"。

替换字符串

替换命令功能比较复杂也很强大,他也支持正则表达式,下面是替换字符串的格式。

:[范围]/[匹配字符串]/[替换字符串]/[行外围]

范围可以使用"%s",表示整个文本,行范围可以使用"g",表示整行。下面举几个例子。

  1. 替换所有"a"为"A"
:%s/a/A/g
  1. 替换1-3行内的所有"a"为"A"
:1,3s/a/A/g
  1. 替换每行中第一次匹配的记录,如下载有10行,每行中有2个"a",现在要替换每行中第一个"a"为"A",可以使用一下命令。
:%s/a/A

执行后字符的更改如下。

aaa
aaa
aa
aaa
aaa
aaa

Aaa
Aaa
Aa
Aaa
Aaa
Aaa
  1. 询问

有时候并不是要替换所有,而是替换指定的,这时候可以加入询问功能,即在行范围中加入"c",即可进行询问,输入"y"、"n",进行是否选择。

:%s/a/A/c
  1. 正则表达式。

还可以使用正则来查找,正则表达式符号如下:

符号说明
^行的第一个字符
.表示任意字符或1个字符
[][]内的字符之一
[^]除绑定字符外的任意字符
\*之前内容重复0次以上
\<词首
\n.换行字符
%第一行到最后一行
[AB]A或B
[0-9]0~9之间中所有整数
$行尾
\如实解析下一个字符
\|表示or

使用多个窗口

在很多开发工具中都支持横纵开多个窗口,vim中也可以,可以执行":vs 文件名"或者":sp 文件名"开启多个窗口。

Vim可谓是把键盘所有字符用到了极致。