《VIM教程》笔记

一:vi ,vim, gvim简介php

        vi的功能是最弱的,它是*nix操做系统下最基本的文本编辑器。前端

        vim一开始的功能还不如vi,那个时候它的全称是“Vi IMitation”,即vi模拟器。1992年Vim被移植到了Unix和Dos上,Vim重命名为“ViIMproved”,即vi增强版java

        gvim是Vim的图形前端,是跨平台的编辑器,并且也保持了Vim的风格,能够说,gvim的功能比vim更适合新手去用,功能也更强一些。python

        gvim也支持鼠标操做,这更是为windows下喜欢用鼠标的用户不至于一开始就感受无从下手,可是,真正的快速高效是不要用鼠标去使用vim的,就像咱们用五笔输入法几乎不用按数字键去选字。程序员

 

二:三种模式正则表达式

        vim编辑器是一个模式编辑器,它有三种模式;正常模式、插入模式、底行模式。这三个模式下的咱们的键盘的按键所起到的做用是不同的。编程

        1:Normal模式是“正常模式”,这时候咱们输入的每个字符会被当作一个命令,刚启动vim时就工做于normal模式。它的主要功能就是控制屏幕光标的移动、进行文本的删除、复制等文字编辑工做,好比此时的h表示光标向左移动一格。vim

        2:Insert模式是“插入模式”,这时候和普通的文本编辑器就很类似了,键盘输入什么就在屏幕上显示什么,好比咱们此时敲击键盘上的h表示在屏幕上显示h字符。        windows

        3:last linemode即”底行模式”,它主要用于保存文件或者退出vim,同时也能够设置编辑环境和一些编译工做,好比列出行号、查找字符串等等。也有些人把底行模式并入命令模式,这个没有硬性规定。编辑器

        4:三种模式的转化方式以下图:


        在任何一种模式下,均可以用ESC键来回到命令模式,而后用命令模式切换到其余模式下。

 

        5:vim能够用键盘搞定一切事情,在vim下进行文本编辑也好,进行代码书写也好,必定不要用鼠标,只用键盘就能够了,由于,来回使用鼠标确定会让你的速度变慢,这一点,必须习惯,若是你仍是坚持用鼠标的话,那么很抱歉,你没法真正地体验到vim编程会有多快。

 

三:最经常使用的一些命令


移动:

        1:在normal模式下,用h表示向左移动光标,用j表示向下移动光标,用k表示向上移动光标,用l表示向右移动光标。

 

        2:w是“word”的首字母。表示向后移动到下一个单词的首字母上,无论当前光标是在一个单词的开头、中间仍是结尾。好比下面的例子:

hello, this is only atext,please ignore it.

        无论光标处于单词“this”的哪一个字母,输入w以后,光标都会处于单词“is”的首字母“i”上。

 

        ge则表示移动到前一个单词的尾字母上,无论当前光标是在一个单词的开头、中间仍是结尾。好比下面的例子:

hello, this is only atext,please ignore it.

        无论光标处于单词“ignore”的哪一个字母,输入ge以后,光标都会处于单词“please”的尾字母“e”上。

 

        b是“begin”的首字母,表示移动到当前单词,或者前一个单词的首字母上,这取决于当前光标所处的位置,好比下面的例子:

hello, this is only atext,please ignore it.

        若是光标处于单词“only”的首字母“o”上,则输入b以后,光标会处于单词“is”的首字母“i”上;若是光标处于单词“only”的其余字母,或者后面的空格上,则输入b以后,光标会处于“only”的首字母“o”上。

 

        e是“end”的首字母,表示移动到当前单词,或者下一个单词的尾字母上,这取决于当前光标所处的位置,好比下面的例子:

hello, this is only atext,please ignore it.

        若是光标处于单词“please”的尾字母“e”上,则输入e以后,光标会处于单词“ignore”的尾字母“e”上;若是光标处于单词“please”的其余字母,或者前面的空格上,则输入e以后,光标会处于“please”的尾字母“e”上。

 

        w和ge对应,b和e对应。

        有不少字符也被认为是word,好比“.”,”-“和“)”等都被认为是一个word,咱们能够自由的定义这些word,这些咱们到后面讲配置的时候再说。

 

        3:“$”命令将光标移动到当前行的行尾,“0”命令则把光标移动到当前行的行首。“^”则是将光标移动到当前行的第一个非空白字符上,“g_” 是将光标移动到当前行的最后一个非空白字符上。

        $命令还能够接受一个计数,好比1$会移动到当前行的行尾,2$则会移动到下一行的行尾,以此类推。而0命令和^命令的前面加上一个计数并无任何效果。

 

        4:w命令表示向后移动到下一个单词的开始处,3w则表示向后移动三个单词,3b表示向前移动三个单词,其余数字的功能也是相似的。

 

        5:上面咱们的移动功能都是一个单字符的命令,下面咱们介绍f加上一个字符的命令,这里的f表示“find”,好比fx表示在当前位置向下定位到第一个x所在的位置。

        f加一个字符表示向右搜索,而F加一个字符表示向左搜索。这两个命令仅限于一行内的移动,不会移动到其余行。


        说完了f命令,下面说一下t命令。t是“to”的简写,好比tx表示向右寻找第一个x所在的位置,可是它不是把光标停留在被搜索的字符上,而是在它以前的前一个字符上。小写的t表示向右搜索,大写的T表示向左搜索。

 

        6:上面的光标移动对因而否是程序员都很重要,可是有些移动写程序常常要用到,这是做为程序员必备的移动方式。

        怎么样能快速匹配到括号对应的另外一部分呢?咱们只须要把光标移动到某一个括号(能够是左括号,也能够是右括号)上,而后点一下%命令,它会自动把光标定位到与之对应的括号的另外一部分上。它能够处理小括号,中括号,大括号。

 

        7:要显示行号,用:set number(:setnum)命令,也能够用:set nonumber(:setnonu)来取消显示行号。

 

        8:能够用104G命令来把光标移动到104行的行首,注意这里的G须要是大写的。跳转到其余行也是同理,只修改前面的数字便可。

想要跳转到第一行的行首,那么可以使用gg命令。

想要跳转到最后一行的行首,那么可以使用G命令。

 

        9:除了指定具体的行号以外,咱们还可使用50%命令来跳转到文件的中间位置,用80%命令跳转到文件的百分之八十的位置。

 

查找:

        10:用/加一个单词,能够在整个文档中搜索这个单词,而后用数字加n的组合来定位第几个单词。

若是想要完整匹配一个单词,好比xin,那么能够用命令/\<xin\>来作到,其中\<表示匹配一个单词的开头,而\>则表示匹配一个单词的结束。

 

        vim是支持正则表达式的。

 

编辑:

        11:能够用x命令来删除一个字符,使用4x能够删除四个字符。

 

        有类命令有一个固定的模式:“操做符命令+位移命令”。所谓位移命令,上面已经讲过的移动光标的命令。

 

        dw命令能够删除一个word,d是“delete”的首字母,它后能够跟一个位移命令,它将删除从当前光标起点到位移的终点处的文本内容,好比d4w是删除四个单词。d4w和d4e都是能够删除从该光标处向后的四个单词。

因为$命令是移动光标到行尾,因此d$命令就是删除当前光标到行尾的内容,并且该行的最后一个字符也会被删除。

 

        daw就能够删除一个单词,无论光标在哪,它还会删除该单词末尾的空格。这里的d是delete的意思,而aw则是a word的意思,表示“一个单词”。

 

        12:c和d命令很类似,不过它在命令执行后会进入Insert模式。好比cw命令会首先删除该word,而且会当即进入插入模式。

 

        13:dd命令能够删除整行,而cc命令则能够改变整行。

        14:r命令则是把当前位置的字符被咱们键入的字符所替换,好比rx则是用x来替换当前位置的字符,而5rx表示从该字符以后的五个字符都是用x来替换。而咱们用r以后按回车键,则会删除一个字符而且插入一个换行符,而r4<Enter>即咱们按下r键和4键以后再按回车,会把接下来的四个字符替换为一个换行符。

 

        15:重复操做使用.命令,好比/a来找到全部的a字符,而后在命令模式下键入clb此时把第一个a换成了b,而后咱们在用Esc键退回到命令模式下,而后用n命令来找到下一个被查找出的a字符,而后键入一个“.”,会发现这个“a”也被换成了“b”。

 

        16:用d或者x命令删除文本的时候,被删除的内容仍是被保存了起来,能够用p命令把它取出来,这里的p是put的意思,理解为paste也不错,即“粘贴”,可是它并非vim的思惟模式,是微软党的思惟模式。

        P命令(大写的P)和小写的p命令很类似,只是它会把该内容粘贴到光标字符以前。对于dd删除的整行内容,咱们用P命令会把它放到当前行的上一行,对于dw删除的部份内容,P会把它放到光标以前。

 

        17:上面说到d命令至关于“剪切”,p命令至关于“粘贴”,复制”命令可使用y命令,这里的y是“yank”的意思,翻译成汉语即“拉,抽”。

        其实用copy来表示复制更好理解点,可是很惋惜c命令同时也是“change”的第一个字母,该命令用于表示修改,因此也就没办法用c命令表示复制了,只能用yank的y命令表示复制。

 

        y4w表示复制四个word,用yy来表示复制一行,Y命令也是复制整行的内容,而y$命令则是复制当前光标所在位置至行尾的命令。

 

        18:在命令模式下键入v能够进入visual模式,该模式即“可视模式”,咱们能够用Esc命令退出visual模式,返回到命令模式。

        删除一些简单的文本对象咱们用操做符命令+位移命令就足够了,可是对于咱们想精确地指定范围,就必须使用visual模式了。

 

        在visual模式下,用j命令表示向下再选中一行,用k命令向上选中一行,好比jj就是向下再选中两行,而4j就是向下再选中四行。其实这里的hjkl命令表示光标移动的命令在这里都是可用的,这里的gg则是表示从光标所在位置一直选中到开头部分。

 

        19:若是但愿用新输入的文原本代替那些已经存在的文本,此时就能够在命令模式下输入R来进入替换模式,替换模式相似于插入模式,可是它会用新输入的字符代替原来的字符。


四:最经常使用的一些操做

        新建、打开、保存、另存为等操做要在底行模式下使用。

        1:“:e”命令,后加一个文件路径,能够打开一个文件。

        2:“:w”命令,后加上文件名,能够保存一个文件。并且还能够用“:sav”命令来实现另存为的功能。

        3:其余命令,新建是“:enew”,关闭是“:close”,保存并退出是“:wq”。

 

        4:若是编辑的文件有了后缀名,好比.php, .java之类的,那么vim会自动进行语法高亮,若是尚未给该文件命名,好比新建了一个文件,而后粘贴了一段php代码上去,以下图:


        那么怎么在不保存文件名的前提下进行高亮显示呢?只须要设置一下文件类型就ok了,咱们这里使用:set filetype=php来,以下截图:

 

        5:还能够设置背景色,好比以下命令“:setbackground=dark”以后,以下图所示:(注:默认的状况下使用的background是light)

 

        6:能够用“:colorscheme evening”来调整为黑夜模式,效果以下:

        其实不少选项均可以写到配置文件里去,这样就会方便咱们的操做了,并且更多的设置语法你们就要求助谷哥哥和度娘了。

 

        7:要同时显示两个不一样的文件,或者一个文件太长,须要在两个窗口中查看,或者是同步显示两个文件,不少时候须要多个窗口来作这件事。

        最简单的就是两个窗口,在底行模式下输入“:split”来显示两个窗口,若是想关闭上面那个窗口,只须要把光标移动到上面那个文件上,而后在底行模式下输入“:close”便可关闭它。

        若是开了n多窗口,可是只是重点关注其中一个,可使用命令:only来关闭其余窗口。

        使用命令“:ctrl+w+j/k”,经过j/k能够上下切换窗口。

 

        8:若是想要水平分割,能够用“:vsplit”,它的用法和split同样,只是它是水平分割而已。

 

五:VIM经常使用的一些配置

        在windows下,VIM配置文件一般是_vimrc, vim默认的背景色是白色的,感受太晃眼了,若是喜欢黑色的背景,能够在最后面加入下面一条:

:colorscheme murphy

        再添加一个修改字体的,设置以下:

set guifont=Courier\ New:h15

        让它自动显示行号,添加以下配置项:

set number

 

        通过上面的配置以后,从新启动VIM,打开的界面以下:

 

六:VIM中的宏

        1:在vim中定义宏,一般分为三步:第一步,使用q{寄存器名}开始命令,后续的操做会被记录到该寄存器中,这里的寄存器名必须是a到z之间的一个字母。第二步,执行咱们的那些繁杂的操做。第三步,按下q表示结束对命令的录制。

        2:能够经过@{寄存器名}命令来执行刚刚记录下来的宏了。

 

        3:实例:

        打开vim,先敲入以下代码:

        按下Esc键来进入命令模式,而后把鼠标移动到第一行,而后输入qx,也就是说定义义了一个寄存器,它的名字是x,界面以下:

        先输入“^”命令,光标移动了行首,而后输入“i#include”,截图以下:

        按下Esc键来进入命令模式,而后执行$命令把光标移动到行尾,而后执行a”来给它加上双引号,而后按下Esc键来进入命令模式,而后咱们输入j来把光标移动到下一行,此时效果以下:

        而后咱们输入q命令就能够了。而后执行命令3@x,以后效果以下:

 

        4:因为最多有a-z 26个字母可用,所以,能够定义最多26个宏。

 

        5:把鼠标移动到最后一行,而后在命令模式下用”xp来查看刚才的宏,说明一下,这里的”是双引号,这里的x是我们的宏的名字,若是你并无用x做为宏的名字,那么相应的命令替换为你的宏名,截图以下:

 

七:替换

        1:替换的格式以下:

:s/查找字符/替换字符/[可选的修饰符]

        上面的可选的修饰符,经常使用的有以下几个:g表示替换该行全部的符合的目标字符串,p表示列印,c表示每次执行替换的时候都须要请求确认,若是这个地方什么都不写,表示只是替换第一个匹配到的字符串

 

        还能够在s前面加一个范围参数,好比1,5就表示从第一行开始,到第五行结束,并且它是包括第一行和第五行的。好比命令:“:1,5s/include/qian/g“就是把第一行到第五行的全部include字符串替换为qian。

        若是咱们只想修改第4行的内容,能够用:4s/include/qian/g这个命令。

        若是是全文替换,可使用%,好比:”:%s/include/qian/g”命令。

        若是是替换某个单词(include),而不是字符串(hincludeh),能够用命令:”:s/\<include\>/qian/g”,其中,<和>

 

八:其余

        1:历史记录和命令补齐

        vim支持历史记录和命令行补齐的,好比咱们输入了:s,咱们移动键盘上的↑(就是向上的箭头的那个按键),而后会发现历史命令,继续按几下该键,会发现更多的历史记录被翻出来。

        所谓的自动补全就是用tab键来补全,好比咱们输入:s的话,直接按tab键,会自动补齐为:sNext这个命令。

 

        2:文件浏览

        好比打开了一个python文件,下面咱们能够用“:edit .来查看它所在目录下的文件,值得注意的是,后面的.不能忽略,不然不是浏览当前目录,而是会显示当前的文件名

 

        能够经过“:pwd”来查看当前的工做目录,能够经过“:cd”来设置当前的工做目录。

        能够用“:find”文件名的方式来查找文件,它是在当前的工做目录下查找的。

        若是光标所在位置是个文件名或目录名,则键入“gf”命令,Vim 就会找到并打开这个文件。


        3:其余

        插入模式变种命令:

        a:在光标后插入

        o:在当前行以后插入新行

        O:在当前行以前插入新行

        cw:替换从光标到单词结束

        caw:替换光标所在单词



转自《辛星VIM教程