VIM 具有 6 种基本模式和 5 种派生模式。(基本模式:普通模式、插入模式、可视模式、选择模式、命令行模式和 Ex 模式;派生模式:操作符等待模式、插入普通模式、插入可视模式、插入选择模式和替换模式)
在 Linux 的命令行通过 vi 文件名 或 vim 文件名 即可用 VIM 编辑器打开你的文件
进入插入模式的各种方法
按键 | 含义 |
i | 在光标的前边进入插入模式 |
I | 在光标所在行的行首进入插入模式 |
a | 在光标的后边进入插入模式 |
A | 在光标所在行的行尾进入插入模式 |
o | 在光标所在行的下方插入空行并进入插入模式 |
O | 在光标所在行的上方插入空行并进入插入模式 |
s | 删除光标指定的字符并进入插入模式 |
S | 将光标所在行清除并进入插入模式 |
回到普通模式,仅需要敲一下键盘左上角的 Esc 按键即可
退出 VIM 的方法
一般退出 VIM 分两种:一种是保存修改并退出;另一种则是直接退出。无论你选择哪一种退出方式,都先请敲一下 Esc 按键回到普通模式。
对于第一种(保存修改并退出):
- ZZ(两个大写字母Z,也就是Shift+z+z)
- :wq(这是一个组合命令,如果是 :w 表示保存,而 :q 表示退出)
对于第二种(直接退出)则要区分情况:
- 如果你打开文件只是看看,并不做任何改动,那么直接输入 :q 即可
- 如果对文件动过手脚,但不希望保存(放弃修改)而直接退出,则需要再后边加上一个感叹号 :q!
删除命令
在普通模式下,删除单一字符可以用 x 命令。跟在插入模式按下 Delete 键一样,x 命令是删除光标指定的字符。
更多删除命令
使用删除操作符 d 的删除命令的格式是 d motion
d 是 Delete(删除)的意思,motion 即指定要删除的对象,所以这个命令可以很灵活!
motion 其实是一些表示操作范围的指令,比如:
按键 | 含义 |
0 | 将光标定位到行首的位置 |
^ | 同上 |
$ | 将光标定位到行尾的位置 |
b | 将光标定位到光标所在单词的起始处 |
e | 将光标定位到光标所在单词的结尾处 |
w | 将光标定位到下一个单词的起始处 |
gg | 将光标定位到文件的开头 |
G | 将光标定位到文件的末尾 |
按键 | 含义 |
d0 | 删除光标从当前位置(不包含)到该行行首的所有字符 |
d^ | 同上 |
d$ | 删除从光标当前位置(包含)到该行行尾的所有字符 |
db | 删除从光标当前位置(不包含)到单词起始处的所有字符 |
de | 删除从光标当前位置(包含)到单词结尾处的所有字符 |
dw | 删除从光标当前位置(包含)到下个单词起始处的所有字符 |
dh | 删除光标前面一个字符 |
dl | 删除光标指定的字符 |
dj | 删除光标所在行以及下一行的所有字符 |
dk | 删除光标所在行以及上一行的所有字符 |
dd | 删除光标所在行的所有字符 |
dgg | 删除光标所在行(包含)到文件开头的所有字符 |
dG | 删除光标所在行(包含)到文件末尾的所有字符 |
数字的奥义
d3h 表示删除光标前的 3 个字符,d3j 表示删除光标所在行以及下面 3 行的所有字符,而 d3w 则表示向后删除当前光标到后面第三个单词前的所有字符。
撤销和恢复命令
u 表示撤销最后一次修改;而 U 表示撤销对整行的修改
Ctrl + r 快捷键可以恢复撤销的内容
粘贴命令
使用 p 命令可以将最后一次删除的内容粘贴到光标之后。( P 则是粘贴到光标之前)
如果你需要粘贴的是整行为单位,那么 p 命令将在光标的下一行开始粘贴;如果你拷贝的是非整行的局部字符串,那么 p 命令将在光标后开始粘贴。
拷贝命令
y motion
替换命令
r 用于替换光标所在的字符,做法是先将光标移动到需要替换的字符处,按一下 r 键,然后输入新的字符。注意,全程无需进入插入模式,也不会进入插入模式。
替换模式
对于需要替换多个字符,更好的方案是直接进入替换模式。按下大写的 R 键,屏幕左下角出现 -- REPLACE -- 字样,说明你已经处于替换模式。此时输入字符可以连续替换光标及其后边的内容。注意:退格键(Backspace)在替换模式中被解释为如果左边内容被替换过,则恢复到原来的样子;如果没有被替换过,则简单的向左移动。修改完毕后,按下 Esc 回到普通模式。
修改命令
c [number] motion
按键 | 含义 |
c0 | 删除光标从当前位置(不包含)到该行行首的所有字符,并进入插入模式 |
c^ | 同上 |
c$ | 删除从光标当前位置(包含)到该行行尾的所有字符,并进入插入模式 |
cb | 删除从光标当前位置(不包含)到单词起始处的所有字符,并进入插入模式 |
ce | 删除从光标当前位置(包含)到单词结尾处的所有字符,并进入插入模式 |
cw | 删除从光标当前位置(包含)到下个单词起始处的所有字符,并进入插入模式 |
ch | 删除光标前边一个字符,并进入插入模式 |
cl | 删除光标指定的字符,并进入插入模式 |
cj | 删除光标所在行以及下一行的所有字符,并在光标下一行进入插入模式 |
ck | 删除光标所在行以及上一行的所有字符,并在光标下一行进入插入模式 |
cc | 删除光标所在行的字符,并进入插入模式 |
文件信息
快捷键 ctrl + g
跳转
在 VIM 有两种方式可以将光标跳转到指定的位置:
- 行号 + G
- :行号
定位括号
将光标移动到 (),[],{},中的任何一半括号上,按下 % 键,便可看到此时光标已经跳转到另外一半的括号上了。
缩进
开启了 VIM 的 cindent 功能之后,代码默认会按照 C 语言的方式进行缩进。
VIM 可以使用尖括号(< 或 >)来控制缩进,我们常用的就是两个同方向的尖括号表示将光标所在的语句进行缩进和反缩进操作。 >> 表示缩进,而 << 则表示反缩进。
搜索命令
在普通模式下按下斜杠(/)也是进入命令行模式,此时该字符和光标均出现在屏幕的底部,这跟冒号(:)一样。紧挨着斜杠(/)的是搜索目标,比如 /love,说明你找的是 love 这个字符串在光标后边第一次出现的位置。只需按 n 键即可定位到下一个符合的目标(向下查找),而按 N 键则返回上一个(向上查找)。
/目标 | ?目标 | |
搜索方向 | 从光标位置向后 | 从光标位置向前 |
n | 向后搜索下一个 | 向前搜索下一个 |
N | 向前搜索下一个 | 向后搜索下一个 |
输入冒号(:)进入命令行模式,然后输入 nohl 即可在搜索后取消高亮
在搜索命令中,.、*、[、]、^、%、/、?、~ 和 $ 这 10 个字符有着特殊意义,所以在使用这些字符的时候要在前面加上一个反斜杠(\),比如你要搜索问号,则输入 /\?
替换命令
:s/old/new,这样即可将光标所在行的第一个 old 替换为 new;你如果输入的是 :s/old/new/g,则表示将光标所在行的所有 old 替换为 new。
:%s/old/new/g表示替换整个文件中每个匹配的字符串
输入 :%s/old/new/gc
- y 表示替换
- n 表示不替换
- a 表示替换所有
- q 表示放弃替换
- l 表示替换第一个并进入插入模式
- ^E 表示用 Ctrl+e 来滚动屏幕
- ^Y 表示用 Ctrl+y 来滚动屏幕
使用 :5,13s/old/new/g 即可替换第 5 行到第 13 行之间的所有 old
执行shell命令
在输入冒号(:)进入命令行模式,输入感叹号(!),在其后便可以加上 shell 命令。此后 VIM 将临时跳转回 shell,并执行命令。再次按下 Enter 键回到 VIM。
文件另存为
:w 新文件名
局部内容另存为
需要进入一种新的模式,叫:可视模式。在普通模式中按下 V 键即进入可视模式,进入后左下角显示 -- VISUAL --
此时光标的位置开始为选中状态,你可以通过任何移动或范围的按键来移动光标,光标所到之处皆为选中状态(h、j、k、l 移动光标,$ 去到行尾,0 去到行首……)选好范围之后,按下冒号(:)屏幕左下方出现 :'<,'>
输入 w test2表示新建一个 test2 文件,并将选中的内容单独存放进去。
如果路径中已经存在 test2 文件,那么 VIM 会提醒你需要加感叹号(!)才能强制覆盖文件。即输入 w! test2
合并文件
所谓合并文件,便是在 VIM 打开的一个文件中读取并置入另一个文件。只需要输入冒号(:)进入命令行模式,然后输入 r 文件名
打开多个文件
VIM 使用 –o 或 –O 选项打开多个文件,其中 –o 表示垂直并排,例如 vim -o lesson4 lesson5 lesson6
使用 ctrl + w + w 将光标切换到下一个文件
- 对于垂直并排的文件:使用 ctrl + w + 上、下方向,表示上、下切换文件;
- 对于水平并排的文件:使用 ctrl + w + 左、右方向,表示左、右切换文件。
在原来退出命令的后边加上小写 a,则表示退出动作是针对所有的(ALL):qa、qa!、wqa