一、什么是VIM
是一个类似vi的文本编辑器,不过在vi的基础上增加了很多新特性,vim被公认为类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)表示向上翻。