Vim技能修炼教程(4) - 基本功

作者: 阿里云_云栖社区 | 来源:发表于2017-07-06 13:56 被阅读46次

    阅读原文请点击

    摘要:vim基本功

    基本功

    前面我们学会了插件管理器和如何实现语法高亮,相信大家已经从中体会到了vim插件的强大功能。现在,是时候回来补一补基本功了。

    Vi有三种主要模式,正常模式,插入模式和可视化模式。正常我们推荐的方式是所有的移动命令只在正常模式下进行,只有在修改的时候再进入插入模式。

    这个切换是如此频繁,所以Vi提供了很多快速切换模式的命令。Vim的难学之处之一就是命令太多。

    模式切换的好处

    如《Practical Vim》中第8条所说,正常模式和插入模式的切换,可以为撤销编辑带来方便。在没有模式切换的文本编辑器中,编辑器是很难确实您撤销一次是打算撤销一个字符,或者是一个单词还是更大的粒度。而在Vi中,这不是问题,在输入时进入插入状态,输入结束了就Esc退回正常模式。这一过程就构成了一次可撤销的动作。

    基本移动命令

    行内移动

    h: 向左一个字符

    l: 向右一个字符

    0: 移动到行首

    ^: 移动到行首第一个非空的字符

    $: 移动到行尾

    g_: 移动到行尾第一个非空的字符

    列号|: 精确移动到列号

    跨行移动

    j: 向下一行

    k: 向上一行 也可以用emacs的C-n和C-p来上下翻。

    G: 跳到第n行,默认跳到行尾。

    gg: 跳到第1行

    +: 到下一行的第一个字符

    -: 到上一行的第一个字符

    ``:G跳转之后,跳回原来的行

    '': 功能同``,但是停在行首

    vi还支持跳转的书签功能,使用m[a-z]命令,可以定义26个书签。

    m{书签名}: 定义书签

    `{书签名}:跳转到书签定义时的光标位置

    '{书签名}: 跳转到书签定义位置的行首

    按单词移动

    w: 按单词移动,标点符号也算一个单词

    W: 按单词移动,标点符号算在单词内

    e/E: 移动到单词结尾(大写忽略标点符号)

    b/B: 按单词向前移动(大写忽略标点符号)

    滚动一整屏

    C-f 向前一屏

    C-b 向后一屏

    C-d : 向前半屏

    C-u: 向后半屏

    C-e: 屏幕上滚一行

    C-y: 屏幕下滚一行

    重新调整屏幕位置

    z: 光标移至屏幕顶

    z.: 光标移至屏幕中心并滚屏

    z-: 光标移至屏幕底并滚屏

    重绘屏幕

    C-l: 重绘屏幕

    在当前屏幕中移动

    H: 移至屏幕第一行

    M: 移至屏幕中间

    L: 移至屏幕底部

    切换进插入模式的命令

    i: 在光标前插入字符

    a:在光标后插入字符

    A: 在一行的结尾处插入字符,相当于$a组合。

    I: 在一行的开头插入字符,相当于^i组合。

    o: 在光标的下一行新开一行进行插入,相当于A

    O: 在光标的上一行新开一行进行插入,相当于ko

    s: 删除光标处的字符再进行插入

    S: 删除光标所在行再进行插入

    r: 替换当前字符

    R: 替换当前行的字符,可以提前Esc退出,相当于^c

    c: 更新文本,就是先删除部分文本再插入

    cw: 更新当前单词

    c2b: 更新光标之前的两个单词

    c$: 更新光标处到行尾

    C: c$的简写

    c0: 更新光标处到行首

    cc: 更新行,跟S效果一样

    Vi命令的一般形式

    在继续学习更多命令之前,我们先看一下vi命令之所以强大的原因,因为vi的命令并不仅仅是简单的单独命令,而是可以进行组合。

    vi命令的一般格式是:{命令}{次数}{文本移动命令} 或者 {次数}{命令}{文本移动命令}

    上面学习的c命令就是很好的例子,比如c2b,c是命令,2是两次,b是后退

    同样,对于用于删除的d命令,删除当前单词,就把cw换成dw就可以了。d$是删除从光标到行尾。与C是c$的别名一样,D是d$的别名。

    复制命令y,也是同样的用法。

    在vim中,文本移动命令被扩展成文本对象。

    最常用的文本对象命令有:

    aw: a word,单词不计空格

    iw: inner word, 单词,计空格

    as: a sentence,一句

    is: inner sentence

    ap: a paragraph,一段

    ip: inner paragraph

    a" a' a`: 一个字符串

    粘贴

    p/P: 命令用于粘贴用d命令或y命令剪切或复切的文本

    切换大小写

    ~: 切换大小写

    重复和撤销

    . : 重复上一条命令

    u: 撤销上一条命令

    U: 将一整行恢复到原来的状态

    不退出插入模式进行编辑

    Vi推荐主要工作时间都停留在正常模式,但是如果您非习惯于在编辑模式进行编辑,Vim也是提供在这个模式下工作的命令的。

    比如,我们最经常发生的事情就是输错了字符要修改。

    这时候我们有三大利器可以使用:

    C-h: 退格删除前一个字符

    C-w: 删除前一个单词

    C-u: 删除到行首

    另外,我们还可以通过C-o + 正常模式的命令这种方式来节省切换的动作。

    搜索

    全文搜索

    "/"用来进行向下搜索,"?"则是向上搜索。搜索下一个用n,上一个用N.

    vi的强大之处在于,搜索的结果仍然可以跟其他命令结合,比如跟d结合删除。

    行内搜索

    除了全文搜索,行内搜索也是快速编辑的有效手段。以vi的风格,也是为我们提供了多种行内搜索的方法:

    f{字符}:向后搜索字符

    F{字符}:向前搜索字符

    t{字符}:向后搜索字符,不过定位在该字符之前的字符上

    T{字符}:向前搜索字符,定位在该字符之前的字符上

    ;:重复上一次的搜索,方向相同

    , : 重复上一次的搜索,方向相反

    搜索仍然是可以跟操作命令结合,比如df{字符},删除到某字符为止的内容。

    缓冲区

    当我们使用d命令删除一段文本时,它们会被依次存入0-9号这10个缓冲区中。除了这10个自动缓冲区之外,vi还支持a-z一共26个命名的缓冲区。

    我们使用双引号"用来指示对缓冲区的访问。比如:"2p,将2号缓冲区的内容粘贴到当前光标处。

    不过,记住自动放到哪个缓冲区位置还是一件反人类的事情,更好的办法是,使用命名的缓冲区。vi提供了26个命令缓冲区,分别用a-z 26个字母表示。

    从此我们的剪切、复制和粘贴的功能就更丰富了。比如"add,将当前行剪切放入a缓冲区。粘贴时使用"ap。再如:"b10yy,将当前开始的10行复制到b缓冲区。

    vi作为一个功能过剩的编辑器,当然不只这么简单了。它还支持对于缓冲区的内容进行追加,方法很简单,使用缓冲区的大写字母名移,比如"Byy,将当前行追加到b缓冲区内容的末尾。

    黑科技

    针对文本中的数字进行运算

    这个黑科技太好玩了,如果光标处是一个数字的话,可以通过C-a来对其进行+1操作,C-x进行-1.

    如果要多加减几次,就先给个数字就好了。

    这还不够黑科技,C-a和C-x还有搜索功能,如果当前光标不是一个数字,vim会先搜索到下一个数字,再对其进行操作。对于大量数字文本要操作的情况,实在是太方便了。

    阅读原文请点击

    相关文章

      网友评论

        本文标题:Vim技能修炼教程(4) - 基本功

        本文链接:https://www.haomeiwen.com/subject/uwyhhxtx.html