目录
- 为什么学 Vim
- Vim 的三种模式
- 一般模式
- 编辑模式
- 命令模式
1. 为什么是 Vim
- Vim 的前身是 Vi,而 vi 基本上是所有发行版都带的文字编辑工具
- Linux 中基本所有的配置都是以文件的形式记录的,所以自然少不了文字的处理
- Linux 经常是使用命令行模式进行操作,没有鼠标的配合,那必须要一款功能键强大的软件
- Vim 真心强大,强大到竟然有人专门为 Vim 出了一本书
2. Vim 的三种模式
一般模式:大量功能的聚集地,包括:移动光标、复制、粘贴、删除、选择等
编辑模式:除了码字,还是码字
命令模式:高级功能,包括:查找、替换、文件的切换、临时除去执行命令等
三种模式的切换

- 光标的位置:Vim 中,光标是个覆盖一个字符的块,如果想象光标为 Word 重的一个竖线,那么光标的实际所在位置是光块所在位置的前面那个空隙
3. 一般模式
一进入 Vim 就处于一般模式
该模式存在大量功能键
光标普通移动
h:向左移动一个字符
j:向下移动一个字符
k:向上移动一个字符
l:向右移动一个字符光标快速移动
[Ctrl] + f:forward,向前翻页
[Ctrl] + b:backward,往回翻页
<num>h:向左移动<num>个字符,j、k、l用法也一样
0:移至行首
$:移至行末
G:移至最后一行
gg:移至第一行
H:headline,移至当前页面的第一行的第一个字符
M:middle,移至当前页面中间行的第一个字符
L:last,移至当前页面最后一行的第一个字符删除字符
x:相当于 [Delete],向后删除一个字符
X:相当于 [BackSpace],向前删除一个字符
<num>x:向后删除<num>个字符
<num>X:向前删除<num>个字符删除行
dd:删除所在行
<num>dd:向下删除<num>行,包括本行
d0:删除该行中,光标前的所有字符
d$:删除该行中,光标后的所有字符
d<num>G:删除本行到第<num>行的所有字符,包括本行
dG:删除*本行到末行的所有字符,包括本行
- 复制行
yy:复制所在行
<num>yy:向下复制<num>行,包括本行
y0:复制该行中,光标前的所有字符
y$:复制该行中,光标后的所有字符,包括光标所在字符
y<num>G:复制本行到第<num>行的所有字符,包括本行
yG:复制*本行到末行的所有字符,包括本行
粘贴
p:在光标所在下一行开始粘贴,并不覆盖,而是把原内容向下推
P:在光标所在上一行开始粘贴,并不覆盖,而是把原内容向下推区块选择
v:字符选择,效果同 Windows 下的鼠标框选一样
V:连续行选择,通过上下移动光标,可以选择连续的行
[Ctrl] + v:方块选择,通过光标,可以选择文件中任意一片方块区域的内容
[Esc]:退出区块选择
- 其他
J:将下一行合并至所在行,中间以空格
u:撤销一次,多按几次则多往前撤销几次
[Ctrl] + r:再做一次,往往用于撤回后,是对撤回的反悔,多按几次则多反悔几个撤销
.:小数点,不停复制最近的那个动作,但不包括撤销与返回撤销
4. 编辑模式
除了码字,还是码字,仅需记住如何进入以及退出该模式即可
进入一般模式
i: 在光标前插入
I:在光标所在行的行首插入
a:在光标后插入
A:在光标所在行的行末插入
o:在当前行的下一行另起一行
O:在当前行的上一行另起一行
r:取代光标所在的那个字符,仅一次
R:一直取代光标所在的文字,直到按Esc才结束退出编辑模式
Esc
5. 命令模式
会在 Vim 窗口的底部要求输入命令,往往要在一般模式下按
/:?才能进入
该模式带有一些高级功能,常用的如搜索、替换等
常规命令
:w:保存
:w!:强制保存
:q:退出
:q!:不保存,强制退出
:wq:保存后退出
ZZ:动过了就自动保存退出,没动过就直接退出,注意:没有冒号
:w <filename>:另存为
:r <filename>:从光标所在的下一行,插入<filename>的内容
n1,n2 w <filename>:将 n1-n2 行的内容,保存成<filename>
:! <command>:临时切出,执行个命令
:set nu:显示行号
:set nonu:取消行号查找与替换
/<word>:向下查找关键字
?<word>:向上查找关键字
n:继续查找下一个
N:继续查找上一个
n1,n2s/<word1>/<word2>/g:在 n1 行和 n2 行之间查找 <word1> ,并替换为 <word2>
:1,$s/<word1>/<word2>/g:从头到尾用 <word2> 替换 <word1>
:1,$s/<word1>/<word2>/gc:从头到尾用 <word2> 替换 <word1>,但是在每此替换时都要用户确认
- 多文档切换编辑
使用 vim <file1> <file2> ...同时打开多个文件,但进入vim 后仅显示第一个文件
:files:查看当前同时打开的文件列表及顺序
:n:进入下一个文件
:N:进入上一个文件