zoukankan      html  css  js  c++  java
  • VIM学习(转)

    原文:http://www.cnblogs.com/nerxious/archive/2012/12/21/2827303.html

    断断续续的使用VIM也一年了,会的始终都是那么几个命令,效率极低

    前几个星期把Windows换成了Linux Mint,基本上也稳定了下来

    就今晚,我已经下定决心开始新的VIM之旅,顺便写一系列的笔记和总结

    还是那句话,我只是个新人,代码也没写过多少行,但我一直在默默努力自学着

    所以,还请老鸟们看看笑笑就行了,不要鄙视我,我很脆弱……

    这是俺写的《轻快的VIM系列》第一节,每一节都会不断更新,加入更多技巧在里面

    VIM新手们加油,咱一起总结,一起努力练习……

    (一)移动

    字符移动

    k            上移                k
    h            左移            h        l
    l            右移                j
    j            下移

    你也可以使用键盘上的方向键来移动,但这么做h j k l的存在就失去了意义

    之所以使用h j k l来控制方向,其主要目的是让你的手不离开键盘中心,从而提高效率

    tips:在命令前加上数字代表命令执行次数,如:5k,表示上移5行

    单词移动

    W w            移动到下一个单词开头
    E e            移动到下一个单词结尾
    B b            倒退到上一个单词开头

    需要注意的是,E会忽略标点符号,如:I‘m,e会当成两个单词,E则不会

    同样,在命令前加上数字代表执行次数,如:2w,表示往下移动2个单词

    开头我也许会多说几遍,因为这个技巧很重要

    整行移动

    0            移动到行首
    $            移动到行末
    +            移动到下一行开头
    -            移动到上一行开头

    这里需要注意的是+ -和上面的j k有什么不同之处

    j k也是移动到上一行和下一行,但它们移动的是光标所在的位置

    + -不管你的光标在何处,总是移动到下一行或上一行的行首

    进阶

    滚屏

    复制代码
    Ctrl+f            往前滚动一整屏
    Ctrl+b            往后滚动一整屏
    Ctrl+d            往前滚动半屏
    Ctrl+u            往后滚动半屏
    
    Ctrl+e            往后滚动一行        
    Ctrl+y            往前滚动一行
    复制代码

    看似比较多,但是可以根据键盘的位置来进行记忆,并且下面两个也不常用

    上面的滚屏都有一个共同点,就是会改变光标的位置,且屏幕也在改变

    如果想让光标维持在原来的位置实现滚屏请看下面

    用z调整光标

    z<Enter>        将光标所在行移动到屏幕顶端
    z.              将光标所在行移动到屏幕中间
    z-              将光标所在行移动到屏幕低端

    tips:980z<Enter>可以将第980行移动到屏幕顶端

    好吧,有时候你其实不想滚屏,你只想在当前屏幕中移动

    请往下看

    在屏幕中移动

    H            移动到屏幕顶端的行
    M            移动到屏幕中央的行
    L            移动到屏幕底端的行
    
    nH           移动到屏幕顶端往下的第n行
    nL           移动到屏幕顶端往上的第n行

    据我猜测这三个字母应该是HIgh、Middle和Low的缩写,其实挺好记的

    多练习几遍就行了,需要注意的是:这里只是光标的位置变化,和上面两种不同

    tips:你可以用+ -和j k实现同样的位置变化,只不过要操作多次而已

    + -和j k的区别忘了吗?往上看看吧

    在当前行移动

    ^            移动到当前行的第一个非空格处
    n|           移动到当前行的第n列

    这里的^与上面的0通常情况下表示的位置是一样的

    而n|,个人感觉还没有h l方便,慢慢的数出行数还不如直接按着h l 左右移

    根据文本块移动

    所谓的文本块也就是句子、段落、小节等

    (            移动到当前句子开头
    )            移动到下一个句子开头
    {            移动到当前这一段开头   
    }            移动到下一段开头
    [[           移动到当前这一节的开头
    ]]           移动到下一节的开头

    其中,VIM以? . !等符号来标记一个句子

    空白行来标记一个段落

    用节宏来标记一个节(节宏是什么我还没搞清楚)

    根据行号来移动

    Ctrl+g            显示当前行信息
    nG                转至第n行
    G                 转至文本末尾
    gg         移至文本开头

    如果你不知道当前是多少行的话就可以用Ctrl+g来查看

    如果想转到第800行,可以用800G

    其实z命令也可以做到,并且把光标移动到第一行

    tips:``反引号可以返回到使用G之前的位置

    (二)插入

    你需要配合我们第一节中讲的各种移动命令

    上一节我们讲到了VIM中的移动,既然已经能够在屏幕和光标间游刃有余了

    那么,现在就来谈谈插入命令

    不知道有多少VIM新手和我当年(去年)一样,信誓旦旦的以为只有i可以插入

    唉,现在想想都觉得可笑,都是Windows下的编辑器用多了的结果

    鼠标一点,妈妈再也不用担心我的文本插入了……悲剧!

    好了,让我们抛弃过去吧,从现在起奋斗,也许不算太晚

    这是俺写的《轻快的VIM系列》第二节,每一节都会不断更新,加入更多技巧在里面

    VIM新手们加油,咱一起总结,一起努力练习……

    基础

    字符位置插入

    i            在光标之前插入
    a            在光标之后追加

    你看,其实刚开始用这两个就足够了,这就是最基础的

    为什么这么说呢?因为你可以依靠上一节中的移动命令来达到任意位置,然后再大力插入

    不要忘了,VIM中最重要的技巧之一就是命令间的配合使用

    进阶

    行位置插入

    A            在一行的结尾处追加
    I            在一行的开头处插入
    o            在光标所在位置的下一行打开新行插入
    O            在光标所在位置的上一行打开新行插入

    当然,如果你认为先移动光标然后插入或追加慢了,那么就应该用上面这种方法

    它们是以行做单位

    在这里我还是需要提醒一下,命令前加数字代表执行次数

    tips1:10I*<Esc>先输入10,然后输入i,接着输入*号,最后按<Esc>

         这样就可以在一行开头输入十个*

        

    tips2:同样,5o###<Esc>先输入5,然后输入o,接着输入###,最后按<Esc>

         这样就可以在下列5行中每一行开头插入###

        

    看,这样一来,再需要输入重复文本的时候就变得方便了对不对,你可以自己试着扩展思维……

    但我依然会不厌其烦的提醒你,命令的组合也是最重要的技巧之一

    合并行

    有时候你也许会想合并两行

        

    J            合并两行

        

    你只需要把光标移动到首行,然后按3次J即可

    让我感觉奇怪的是,我直接使用3J却只能合并两行,4J才能合并3行

    谁来告诉我为什么

     (三)删除

    字符删除

    x            删除光标所在处字符
    X            删除光标所在前字符

    这里没有什么可注意的地方,但需要说明一下的是

    通常情况下,新手一旦着急便会按着x不动,从而达到删除一大块文本的目的

    如果是头几天使用还好说,但从长久考虑,你还需要学习下面的删除命令

    单词删除

    dw            删除到下一个单词开头
    de            删除到本单词末尾
    dE            删除到本单词末尾包括标点在内
    db            删除到前一个单词
    dB            删除到前一个单词包括标点在内

    很明显,d是delete的缩写,而上面的x则是老式的清除意思

    这里e表示往前删除一个单词,b表示往后删除一个单词,第一节中移动写的很清楚

    要注意的是e b会忽略标点,如don't,它们会把这当做三个单词don、‘ 和 t 来删除

    而大写的E B则不会

    行删除

    dd            删除一整行
    D d$          删除光标位置到本行结尾
    d0            删除光标位置到本行开头

    这三种用法是最好理解的

    我一开始便说过,删除命令需要配合移动命令才能发挥更多作用

    (四)修改

    我想每个Coder都深刻的明白,修改这一操作在代码的世界里是多么重要

    与其说修改,无非就是删除了再插入,但VIM把这两者结合的很有效率

    闲话少说,让我们再次使用这轻快的VIM在code上起舞

    字符替换

    r            单个字符替换
    R            连续替换
    ~           更改大小写

    很简单,多试试就行了

    tips:4~更改连续4个字符的大小写,很有意思

    单词修改

    cw            从光标处修改到单词结尾
    cb            从光标处修改到单词开头

    这里直接使用cw或cb操作很简单,要注意的是加数字的使用方式

    此时2cw 或者 c2w都可以使用,功能一样

    行修改

    c$            从光标修改到本行末尾
    C             功能同上
    c0            从光标修改到本行开头
    cc            删除整行从头修改
    S             功能同上
    s             删除光标所在位置的字符,然后插入

    这里有点难记,主要是多练习才能看到效果

    其中,c$和C功能是一样的,都是从光标修改到行尾,d$+a达到相同效果

    c0和d0+i效果一样,区别是少输入一次

    cc和S效果也是一样,其实S是属于插入的范畴,这里类似,所以一起讲了

    再来是s,它会删除光标处的字符再插入,效果等同于x+i或c+space

    多行修改我想就不用说了,前面加上数字再组合命令就可以了

    从上面看来,我们应该可以更深刻的认识到,VIM中大部分命令是组合使用的

    利用好了这点才能更快的摸索出自己的使用习惯,从而高效修改

    (五)复制

    操作相同文本的时候复制尤其有效,在Windows中我们都习惯了先用鼠标选择文本

    而Vim下则不用那么麻烦,你甚至可以使用可视模式操作,但这里先略过

    我在这一节主要说说命令模式下的复制

    在讲复制之前我要先说一个简单到不行的命令

    粘帖

    p            粘帖                  

    复制的形式可以很多,但是粘帖的形式却没多少

    无非就是加数字达到多次粘帖什么的

    其实准确的说,p应该是放置的意思

    不过我也搞不清是paste还是put的缩写

    单词和字符复制

    ynl            向右复制n个字符
    ynh            向左复制n个字符
    ynw            向前复制n个单词
    ynb            向后复制n个单词

    由于复制操作通常是在量比较大的情况下进行

    所以这里我使用了n代替需要操作的个数

    需要说明的是,这里看起来并没有多大意义

    因为复杂字符和单词还没有直接插入的方式来的快

    行复制

    y0            复制到行首
    y$            复制到行末
    yy            复制整行
    yH            从当前行复制到屏幕顶端
    yL            从当前行复制到屏幕低端

    这里前两条用的也比较少

    但是整行或多行复制才是yy的方便之处

    tips:1. 4yy也就是复制4行

             2.y几乎可以跟任何光标移动命令结合,不信你试试

    剪切

    说完了复制这里顺便把剪切的命令也说下

    其实剪切很简单,就是先删除,然后按p粘帖

    比如dd删除一行后,这一行会被放入缓冲区

    接着移动到你想放置的位置,按p,就被粘帖好了

    (六)恢复

    恢复在VIM里比较简单,不过想要具体恢复到某个时间段很难

    就我的经验而言,有时候使用恢复还不如删了重写

    这里我们来讲讲恢复、撤销和重复命令的使用

    u            撤消上次命令
    U            恢复整行
    ctrl+r       重做
    .            重复
    e!          全文恢复

    如果有使用office的经验,那么这里的撤销和重做应该很好理解

    比如我用dw删除一个单词,按下u就会回到没删除之前

    一旦我后悔了,ctrl+r便会重新删除一次

    其中U也十分好用,它能恢复本行内容,无论你在本行做过什么

    需要注意的是,你不能在别处操作多次后再回到那一行来恢复

    接着.号能够重复你上次命令

    比如dd删除一行,你接着按一次.就相当于重新使用一次dd命令

    如果你按5.那就是重复dd5次了

    最后e!就牛逼了,当你把代码写的无比凌乱之时

    它能恢复到最初形态,只要你还没使用过w、wp或x保存

  • 相关阅读:
    转 Hystrix超时实现机制
    Hystrix实现ThreadLocal上下文的传递 转
    MongoDB里做表间关联
    转载:mongodb的两阶段提交实战
    MongoDB中的读写锁
    Mongodb中的 原子性 隔离性
    web服务优化
    MongoDB分片(Sharding)技术
    MongoDB复制集
    consul分布式集群搭建
  • 原文地址:https://www.cnblogs.com/yzl050819/p/7064696.html
Copyright © 2011-2022 走看看