前言
使用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或者打开文件时,就是正常模式,在窗口左下角就能查看编辑器的当前模式,下面是各模式之间切换步骤。
- 正常模式:第一次执行的状态
- 插入模式:按i、a、o、I、A、O
- 命令模式:在正常模式下按Esc输入冒号":"
- 可视化模式:按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,并且也会退出,否则,我们只能在命令模式下通过命令进行保存,进命令模式需要在正常模式下按":"。
- 保存更改
进入命令模式下输入w,然后回车。
- 保存为指定文件名
进入命令模式下输入w 文件名,然后回车。
- 强制保存
在w后面加上'!'可以强制保存文件。
- 保存并退出
进入命令模式下输入wq,即可保存并退出。也可以wq!进行强制终止。
移动到指定行号
如果想移动到指定行,那么首先要知道目标行号,但是默认的情况下是不显示行号的,但是可以通过命令让他显示,在命令模式下输入'set number'即可,或者是'set nu',然后在正常模式下输入nG就能移动到指定行,这里的n就是指定的行号,比如移动到10行,输入'10G'即可。
隐藏行号的在命令模式下输入"set nonumber"或者是"set nonu"即可。
移动一页
如果每次移动一个字符觉得太慢,那么可以通过以下命令进行半页、一页进行移动。
- Ctrl+F
移动到下一页
- Ctrl+B
移动到上一页
- Ctrl+D
向下移动半页
- Ctrl+U
向上移动半页
覆盖
如果有个单词拼错了,那么我们可以将光标移动到目标字符位置,删除后重新写,但是还有个办法,可以直接覆盖光标位置的字符。
如现在有个字符abccef,要将第四个c改写成d,可以将光标移动到第三个c后面,在正常模式下按下"rd"即可覆盖,当然也可以进行重复,按下"5rc",代表把光标位置后面的5个字符覆盖为"c"。
还可以使用"R",可以一直替换光标后面的字符。
合并行
如果想合并上下两行,可以按下"J"键,可以合并当前光标所在行和下一行,中间会通过空格分开。
大小写转换
在光标所在行按下"~"键即可将光标后面的字符进行大小写转换。
查找字符串
vim中查找字符串的方式很简单,在命令模式下输入"/"后在输入要查找的字符串即可。
如在文章中查找"天",即可输入"/天",要进行下一个字符时候按下"n"。
替换字符串
替换命令功能比较复杂也很强大,他也支持正则表达式,下面是替换字符串的格式。
:[范围]/[匹配字符串]/[替换字符串]/[行外围]
范围可以使用"%s",表示整个文本,行范围可以使用"g",表示整行。下面举几个例子。
- 替换所有"a"为"A"
:%s/a/A/g
- 替换1-3行内的所有"a"为"A"
:1,3s/a/A/g
- 替换每行中第一次匹配的记录,如下载有10行,每行中有2个"a",现在要替换每行中第一个"a"为"A",可以使用一下命令。
:%s/a/A
执行后字符的更改如下。
aaa
aaa
aa
aaa
aaa
aaa
Aaa
Aaa
Aa
Aaa
Aaa
Aaa
- 询问
有时候并不是要替换所有,而是替换指定的,这时候可以加入询问功能,即在行范围中加入"c",即可进行询问,输入"y"、"n",进行是否选择。
:%s/a/A/c
- 正则表达式。
还可以使用正则来查找,正则表达式符号如下:
| 符号 | 说明 |
|---|---|
| ^ | 行的第一个字符 |
| . | 表示任意字符或1个字符 |
| [] | []内的字符之一 |
| [^] | 除绑定字符外的任意字符 |
| \* | 之前内容重复0次以上 |
| \< | 词首 |
| \n. | 换行字符 |
| % | 第一行到最后一行 |
| [AB] | A或B |
| [0-9] | 0~9之间中所有整数 |
| $ | 行尾 |
| \ | 如实解析下一个字符 |
| \| | 表示or |
使用多个窗口
在很多开发工具中都支持横纵开多个窗口,vim中也可以,可以执行":vs 文件名"或者":sp 文件名"开启多个窗口。
Vim可谓是把键盘所有字符用到了极致。