zoukankan      html  css  js  c++  java
  • 《VIM教程》笔记

    一:vi ,vim, gvim简介

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

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

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

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

     

    二:三种模式

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

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

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

            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教程

  • 相关阅读:
    机器学习:随机森林RF-OBB袋外错误率
    直观判断图像是否可以被实时处理
    职业:图像处理入门教程
    Caffe+Kubuntu16.04_X64+CUDA 8.0配置
    Photoshop显示RGB值问题
    统计:mAP的中文意思
    三维重建:多点透视cvSolvePNP的替代函数(Code)
    SLAM:ORB-SLAM 位姿优化描述
    MxNet : use the MxNet windows versioin
    Python 遍历目录
  • 原文地址:https://www.cnblogs.com/gqtcgq/p/7247264.html
Copyright © 2011-2022 走看看