在linux系统中,默认都安装了vi,它是最常用的文本编辑器,而且很多软件默认编辑器用的也是vi。
vi的全称是 ——visual interface
vim的全称是——visual interface improved
vim是vi的增强版,vi/vim 文件名,启动该编辑器。
既然有vi,那我们为何还要学vim?
vim应该说是程序编辑器,它不仅拥有vi的功能,它更像一般的IDE一样,根据文件名载入不同的语法高亮等等。因此我们有必要熟练掌握vim,提升在linux系统中工作的效率。
- 模式
vim有三种模式,命令模式,插入模式和可视模式。
命令模式:vim编辑文件,进入时的初始模式,在这个模式下可以输入各种命令进行操作,如复制、删除等。
插入模式:在命令模式下通过输入插入命令,进入插入模式,可以对文件内容进行编辑。
可视模式:可视化,支持灵活的文本选择,并对选择的文本域做处理。
1. Esc是个很好的按键,在vim中,它和ctrl+c有着相似的功能,可以从其它模式切换回初始的命令模式。
2. 有三种方式进入可视模式——v(逐字)或V(逐行)或ctrl+v(逐块)。
- 插入
在命令模式下,输入插入指令,便进入的插入模式,插入指令有如下这些。
指令 | 效果 |
i | 在当前字符左侧插入 |
I | 在当前行首插入 |
a | 在当前字符右侧插入 |
A | 在当前行尾插入 |
o | 在当前行之后插入新的一行 |
O | 在当前行之前插入新的一行 |
在vim中,很多命令都可以配合数字使用,比如在当前位置后插入3个!,我们在命令模式下输入3a!,这里的Esc是必须的,否则命令不生效。
- 方位
红色标注,为我自己常用的指令。
指令 | 效果 |
h | 向左一个字符,相当于键盘左键 |
j | 向下一个字符,相当于键盘下键 |
k | 向上一个字符,相当于键盘上键 |
l | 向右一个字符,相当于键盘右键 |
w | 向右移动一个单词,光标停在单词首部,如行尾则转至下一行 |
b | 向左移动一个单词,光标停在单词首部,如行首则转至上一行 |
e | 向右移动一个单词,光标停在单词尾部,如行尾则转至下一行 |
ge | 向左移动一个单词,光标停在单词尾部,如行首则转至上一行 |
^ | 移动到当前行第一个非空白字符上 |
0 | 移动到当前行第一个字符上 |
$ | 移动到当前行的行尾 |
gg | 移动到第一行 |
G | 移动到最后一行 |
ctrl+e | 屏幕向下滚动一行 |
ctrl+y | 屏幕向上滚动一行 |
ctrl+d | 向下滚动半屏 |
ctrl+u | 向上滚动半屏 |
ctrl+f | 向下滚动一屏 |
ctrl+b | 向上滚动一屏 |
:+n | 跳到第n行 |
[[ | 跳到上一个函数 |
]] | 跳到下一个函数 |
1. 充分利用数字组合,例如3j,向下移动3行。
2. 冒号加数字,跳到指定行数,如果n超过当前文件行数,则跳到行尾。
3. 数字+$,移动到之后数字行的尾部,例如3$,表示以当前行为首,移动到之后的第三行行尾。
- 查找
指令 | 效果 |
/text | 查找text,按n健查找下一个,按N健查找上一个 |
?text | 查找text,按n健查找上一个,按N健查找下一个 |
:set ignorecase | 忽略大小写的查找 |
set noignorecase | 不忽略大小写的查找 |
:set hlsearch | 所有搜索结果高亮显示 |
:set nohlsearch | 搜索结果取消高亮显示 |
:set incsearch | 逐步搜索模式,随着输入便实时搜索并展示 |
:set noincsearch | 取消逐步搜索,只有敲回车后才会触发搜索 |
:set wrapscan | 循环搜索,搜索到行尾后,会再次从头搜索 |
:set nowrapscan | 取消循环搜索 |
1. 在查找时,有一些特殊字符需要加斜线进行转移,如.*[]^%/?~$。
2. 快速查找某个单词,只需要把光标移动到该单词上,按*或#键即可以该单词进行搜索,相当于/和?。
3. 输入冒号:,或者?,或者/之后,都可以通过上下键来选择历史操作。
- 替换
指令 | 效果 |
ra | 光标所在字符替换成字符a |
:s/old/new/ | 将当前行第一个old替换成new |
:s/old/new/g | 将当前行所有old替换成new |
:%s/old/new/ | 将所有行第一个old替换成new |
:%s/old/new/g | 将所有行所有old替换成new |
:n1,n2s/old/new/ | 将文件第n1行到第n2行的第一个old替换成new |
:n1,n2s/old/new/g | 将文件第n1行到第n2行的所有old替换成new |
替换内容支持正则,比如:10,20s/^/\t/g 表示将文件10到20行,每行开头都加一个指标缩进。
- 删除
指令 | 效果 |
x | 删除当前字符 |
X | 删除当前字符的前一个字符 |
dd | 删除当前行 |
D | 删除当前字符到行尾 |
J | 删除两行之间的换行,合并两行 |
1. x——删除字符。
2. d——删除行。
3. J——删除行之间换行。
到这里,我们要讲一下vim的强大组合了。上面我们已经几个例子,比如:
3a!代表了向后插入三个空格
3$移动到第三行的行尾
等等组合。
这些组合,主要分为两种,一种是数字+指令,一种是指令+指令,使用多了也就记住了,在此给大家列举些组合用例:
指令 | 效果 |
dh | 删除前一个字符 |
dj | 删除上一行 |
dk | 删除下一行 |
dl | 删除当前字符 |
ndd | 删除当前行开始的连续n行 |
d$ | 删除当前字符到行尾,相当于D |
dgg | 删除当前行及以上所有行 |
dG | 删除当前行及以下所有行 |
- 复制和粘贴
和删除一样,支持与数字、操作的各种组合。
指令 | 效果 |
yy | 复制当前行 |
nyy | 复制从当前行开始之后的n行 |
p | 粘贴 |
1. vim的删除和剪切是同一个意思,没有单独的剪切操作,比如dd可以理解为剪切当前行。
2. 粘贴操作p,根据复制内容的不同,而粘贴位置不同。比如复制字符串,则在光标之后粘贴,如复制整行,则在下一行粘贴。
3. 更灵活的操作,需要进入可视模式,在可视模式下操作光标选择所需内容,此时按下yy,即对所选内容进行复制。
4. 多使用组合键,事半功倍,比如ddp交换当前行和其下一行,xp交换当前字符和后面字符。
- 撤销和还原
指令 | 效果 |
u | 撤销历史操作 |
U | 撤销本行上一次操作 |
ctrl+r | 还原 |
1. u可以一直撤销到最开始vim时候的状态。
2. U只能撤销上一次操作,因此连续按两次U,则回到现在状态。
3. ctrl+r相当于u的逆向。
- 退出和保存
指令 | 效果 |
:q | 退出 |
:q! | 强制退出,忽略所有更改 |
:w | 保存当前操作 |
:wq | 保存并退出 |
ZZ | 保存并退出 |
:e! | 放弃所有修改,并打开原始文件 |
1 Pingback