持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情
什么是VIM
是一个类似vi的文本编辑器,不过在vi的基础上增加了很多新特性,vim被公认为类vi编辑器中最好用的一个。
vim在vi的基础之上增加了很多的小功能。可以有效的帮助程序员快速的排查问题。
很多系统都内建vi编辑器,其他的文本编辑器不一定有,很多软件都会主动调用vi的接口。
VIM的三种模式
一般模式、编辑模式、命令模式
一般模式
h或←光标左移一个字符。如果是20h,表示左移20个字符。
j或→光标下移一个字符 同上
k或↑光标上移一个字符 同上
l或↓光标右移一个字符 同上
[Ctrl]+[f]屏幕向下移动一页 Page Down!!
[Ctrl]+[b]屏幕向上移动一页 Page Up !!
0或[Home]移动到此行最前面字符处!!
$或[End]移到光标所在行的行尾!!
H 光标移到当前屏幕最上方行的第一个字符!!
M光标移到当前屏幕中间行的第一个字符!!
L光标移动到当前屏幕最下方行第一个字符!!
G移到此文件最后一行!!!
nG移到第n行
gg相当于1G,即移到第一行!!!
n[Enter]光标下移n行
/word向下查找单词“word”(!!!)
?word向上查找单词“word”(!!!)
n表示重复前一个查找操作
N与n相反(反向查找)
yy复制光标所在行(!!)
nyy复制光标所在向下n行(n为数字)
y1G复制光标所在行到第一行所有数据
yG复制光标所在行到最后一行所有数据
y$复制光标所在处到同行最后一个字符
y0复制光标所在处到同行第一个字符
p将已复制的数据粘贴到光标所在下一行
P将已复制的数据粘贴到光标所在上一行
u复原前一个操作(类似于windows中的ctrl+z)!!!
Ctrl+r恢复一个操作
x向后删除一个字符
nx向后删除n个字符(n为数字)
X向前删除一个字符
dd删除光标所在行(!!!)
ndd删除光标所在行以下n行(n为数字,包含当前行在内)
d1G删除光标所在行到第一行所有数据(包括所在的行)
dG删除光标所在行到最后一行(!!)
d$或d end删除光标所在处到同行最后一个字符(!!)
d0或d home删除光标所在处到同行第一个字符。(!!)
编辑模式
i从光标所在处插入(!!!)
I从光标所在行第一个非空白字符处插入(!!)
a从光标所在处下一个字符处插入
A从光标所在行最后一个字符处插入(!!)
o在光标所在处下一行插入新的一行(!!)
O在光标所在处上一行插入新的一行(!!)
r替换光标所在处字符一次
R一直替换光标所在处文字直到按下Esc(!!!)
命令模式
如何进入命令模式:
:、/、?
- 三种符号任意都可以进入命令模式
:w [filename] 另存为filename
:r [filename] 读取filename指定文件中的内容到光标所在的行。
:n1,n2 w [filename] 将n1到n2行另存为filename
:! command 临时切换到命令行模式下执行command命令。
- 例如
:!find / -name Helllo.java即可在vim当中执行命令。
:wq 保存后离开
:q 不保存离开(未改可以离开,如果修改了需要q!强制离开)
:q! 不保存强制离开
:set nu 显示行号 (number)
:set nonu 取消显示行号 (noNumber)
:s/word1/word2/g 在当前行将word1替换成word2(!!)
:%s/word1/word2/g 在当前文件将word1替换成word2(!!)
:n1,n2s/word1/word2/g 在n1到n2行查找word1替换成word2 (n1、n2为数字)
:10,$ s/word1/word2/g从第一行到最后一行查找word1替换成word2
:%s/word1/word2/gc 同上,在替换前确认是否替换。(!!!)只能单行确认,需要逐个确认。
- 替换为 b (y/n/a/q/l/^E/^Y)?
- y表示yes,n表示no,a表示all(限光标当前到最后一行),q表示quit,l表示替换后移动光标到行首,^E(Ctrl+E)表示向下翻,^y(Ctrl+Y)表示向上翻。