Vim是Unix及类Unix系统文本编辑器,一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。

vim的设计理念是组合;

vim有5种模式:一般模式,命令模式,编辑模式,替换模式,视图模式.

通过r和R进入替换模式,r只能替换一次,R可以对选定的区域一直进行替换。

通过v和V进入视图模式.视图模式用来选定区域模式。


撤销

:e!   //恢复文档原始状态

u      //退回前一个动作,同‘撤销’。

ctrl+r   //重复前一个动作。


复制/粘贴/删除

yy   //复制当前行。

nyy   //复制从当前行开始的n行。 

EG:   5yy  //复制从当前行开始的5行。

p    //粘贴到当前行的下面一行。

P    //粘贴到当前行的上面一行。

D   //从当前光标开始删除到行尾。

dnG  //删除第n行到当前行的数据。

EG:     d1G //删除第1行到当前行的数据。

dG  //删除光标所在处到文件末尾

dd  //删除当前行

ndd //从当前行开始向后删除n行。

d^  //删除从光标到文件开头。

d$  //删除从光标到文件末尾。

x   //向后删除一个字符。(其实是删除光标所在区域的字符)

nx  //向后删除n个字符。(其实是从光标所在区域开始删除n个字符)

X   //向前删除一个字符。(其实是删除光标所在区域前面的个字符)

nX   //向前删除一个字符。(其实是删除光标所在区域前面的n个字符)


查找

/str    //从光标位置向下搜索str

?str    //从光标位置向上搜索str

n       //查找下一个str

N(或shift+n)  //查找上一个str


替换

:%s/123/abc/g   //把123全部替换成abc.

:%s/123/abc/gc   //把123全部替换成abc,但是加入/c之后,需要操作者一个一个进行确认.

:num1,num2  s/word1/word2/g    //用word2替换从第num1行到第num2行的word2.

注:可以用@和#的效果,与用/是一样的。

EG:10,15  s/word1/word2/g       //用word2替换从第10行到第15行的word2.

   1,$  s/word1/word2/g         //用word2替换从第1行到最后一行的word2.

   :10,15 s/^/#/g       //把第10到15行开头替换为//。

   :10,15 s/^#//g  //把第10到15行开头//替换为空。

注:10,15 s/^/#/gc   //在这个命令后面加个/c表示询问的意思。通过输入y/n等去确认。


块操作:

v  //光标经过的字符被选中。

V  //光标经过的行被选中。

ctrl+v   //矩阵方式选中。

y   //复制选中的数据。

d    //删除选中的数据。


多文件编辑:

vim  file1  file2   //同时编辑file1和file2两个文件。

:files   //列出当前打开的文件列表。

:n       //编辑下一个文件。

:N       //编辑上一个文件。


多窗口操作:

:sp   filename2    //使用vim打开filename1之后,输入:sp   filename2,在新窗口打开filename2.

crtl+w 快速按j          //窗口向下切换。“进入filename2的窗口。”

crtl+w 快速按k          //窗口向上切换。“进入filename1的窗口。”


插入:

:r   filename3     //把文件filename3的内容插入光标处,r可以理解为read。

i   //在光标前插入。

I   //在行首插入。

a    //在光标后插入。

A    //在行尾插入。

o    //在下一行插入。

O    //在上一行插入。

r    //输入替换光标位置的字符。

R    //进入替换模式,可以对选定区域进行一直替换。

—    //大小写切换。

ESC  //退出编辑模式,进入一般模式。


保存:

:w   //保存。

:w   //强制保存。

:w   filename1   //   把当前文件写入filename1.w理解为write或另存为一个文件filename1.

:n1,n2   w   filename2    //把当前文件n1到n2行写入filename1.w理解为write或另存为一个文件filename1.


退出:

:q  //退出。

:q! //强制退出。

:wq!  //强制保存并退出。

:x    //保存并退出。


光标移动:

k j h l  //使光标上下左右移动

0        //使光标移动到行首。

$         //使光标移动到行尾。

gg        //使光标移动到文档首行。

G         //使光标移动到文档末行。

nG        //移动到文档第n行。或使用:n之后按ENTER.

n之后按space   //向后移动n个字符.

向上翻页   //ctrl+b 或  pageup

向下翻页   //ctrl+f 或  pagedown.


其他操作:


:set nu   //添加行号

:set nonu   //取消行号


:set  ic   //设置忽略大小写

:set noic   //取消忽略大小写设置。


:!command                      //在不退出vim的情况下,使用命令。

EG:    :r  !ls -al           //在不退出vim的情况下,使用命令ls -al,并把结果插入光标处。


:ab  aaa   bbbcccddd        //这个命令用于在需要频繁输入同一个长字符串时,只要输入前几个字符,系统就会自动补全后面字符。ab可以理解为a与b两个字符串连在一起。

:unab  aaa                  //取消对aaa执行ab的定义.


:map  快捷键  触发命令

:map  T  :q!    //以T代替:q!   

注:输入后直接切换到其他模式即可。

:unmap  T     //取消T的快捷键作用。