zoukankan      html  css  js  c++  java
  • 菜鸟vimer成长记——第1章、统一概念

      不管学什么技术,我都深信概念是最重要的。是影响整个学习轨迹,决定能在这个技术领域高度。

      当然如果你现在的目的不是在学习而在于解决问题(很多人不愿意承认,或者没发现),那概念就暂时没那么重要了。

    目的

       弄清楚这些概念,有助于记忆,举一反三。重复的东西只学一次!!

    用键盘不用鼠标

      第一关是理解vim的设计思路,vim设计之初就是整个文本编辑都用键盘而非鼠标来完成,键盘上几乎每个键都有固定的用法。

      

      具体有两个要注意的建议:

    学会盲打

      如果你要低头看着键盘打字,或者键位不熟悉,或者指法不舒服,那学习Vim 的好处不会立竿见影地显现出来。要高效地使用Vim,必须学会盲打。

    不要离开主键盘

      手指千万不要离开主键盘。很多人会说用光标键盘也没事,偶尔用一下或者设置一下鼠标。

      不离开的理由:任何操作通过键盘都是可以完成的,只是不知道或者不熟悉而已,只要练习这些时间最终是可以被消除的。而回来切这中间是需要时间的,这些时间再怎么练习也是不可避免的。

    组合式的设计理念

      vim的学习,特别像汉字学习或者linux学习,通过组合。汉字你只要记几个部首和意义字,很多你没学过字组合在面前也能看得懂。linux,只要记住基本的命令,通过组合可以实现强大复杂的功能。

      所以重点在于,通过各个维度划分快捷成独立概念。然后在操作的时候通过组合的方法去思维

    每个快捷即是独立概念

      这里要描述的是概念,所以不会穷举快捷。具体的快捷到时会打散到各个模式里的常用操作。

      比如:

    • 表示动作的有: d(删除),m(移动),co(复制),s(替换),y(复制)等
    • 表示移动的有:$(词尾),0(词首),w|b|e(词),G(行),h|j|k|l(方向)等
    • 表示重复的量词:n(表示任何正数)

    组合这些概念来完成命令

      有一句话:越简单越灵活,实现的能力越强大。这是因为组合的存在。

      比如:

    • "dd" 删除当前行
    • "3dd" 删除三行
    • "d$" "d"表示删除,$"代表行尾,删除到行尾的内容(包含光标);
    • "dw"  表示删除一个单词
    • "dG"  表示删除到文件末尾
    • "dff"  表示删除到第一个f

    正则表达式

      vim的操作核心是文本,既然是文本必须会提到正则。如果正则不熟悉,那很多地方是很纠结的。

      这里只描述vim使用正则的场景。这里我划分的是两大块内容:通过正则匹配定位到文本,然后通过动作去操作

      想了解更多正则,可以参考下面资源:

      几个正则表达式文章

      正则表达式30分钟入门教程

      正则基础之——NFA引擎匹配原理

    应用场景

    • 查找(阅读):/|?
    • 替换:s
    • 删除:d
    • 拷贝:co
    • 移动:m

      更细则的东西将在normal模式里记叙。

    所有重复都可以被解决

      本质上讲,我们的工作是重复性的。不论是在几个不同的地方做相同的小改动,还是在文档的相似结构间移动,我们都会重复很多操作。凡是可以简化重复性操作的方式,都会成倍地节省我们的时间,都会被vim解决。

      下面的举例只为说明问题,可能还不是最佳的方案。

    文本操作

      vim通过:.命令,;命令,量词,history,宏,vimscript等手段来实现消除重复操作。

      但是消除这些重复的关键是以下的思想

    不要自我重复

      举例说明:

    //有以下的文本
    //要实现的效果,每行递进缩进一行。
    Line one
    Line two
    Line three
    Line four
    //千万不要这么操作
        //>G
        //j >G
        //j >G
        //j >G
    //上面的做法不断再重复>G这两个操作。
    //合理一些的操作是
        //>G
        //j .
        //j .
        //j .
    //当然再合理一些是用宏录制或者还有其他办法

      只要是重复的任何操作都可以被解决。这点非常重复!

     绝不多使用一个命令

      举例说明:

    //现在光标在行中间,但是发现行尾没有分号,或者说这行暂时不需要想给注释掉。
    //千万不要这么做
        //移动$|0
        //按i
        //输出符号
    //合理做法
        //直接使用I|A
        //输出符号

      只要一个命令可以完成的,坚决不使用二个或者多个命令。换句话说,每一个vim命令都是有原子的独立的概念,请最终独立记忆。  

    使修改可重复

      举例说明:

    //给+号左右都多加一个空格
    var foo = "method(" + argument1 +","+argument2+")";
    //千万不要这么做:
        //f+
        //i空格->(移动光标)空格
        //f+ .
        //f+ .
    //合理作法:
        //f+
        //s空格+空格
        //f+ .
        //f+ .

      首先,第一种使用了光标移动,这是很费时的,因为要在主键盘和光标区切换。其次也不能实现效果,因为.命令重复的是vim的操作,光标不包括在内。

      所以很多时候要思考修改可被重复。 

    使移动可重复

      上面的例子可以再简化。;命令会重复上次查找。因此后面可以输入两次按;即可。

      所以,尽量让移动也可以重复。就可以使用;来简化。

    理想模式

      ;命令带我们到下一个目标字符上,而.命令则重复上次的修改。因为连续输入2次;.就可以完成全部。理想的模式:用一键移动,另一键执行

    IDE操作|个性化操作

      只要是重复的都可以被解决。上面说的是文本的重复操作解决方案。除了文本之外还有更多的重复。比如在不同使用功能时使用不同插件。根据自己的个人喜爱,把重复的设置通过配置文件来固化。

      比如说

    • 在标记快速定位,可以使用ctags插件等。
    • 你不用每次都set nu,不用每次都设置缩进。

    回退everything

      当vim让一个操作或者移动可以方便地重复时,我们经常会不小心操作太快过了头。这时不用担心,vim提供了强大的回退机制。

    //目的                          操作                      重复          回退 
    //做出一个修改                   {edit}                    .              u 
    //在行内查找下一指定字符           f{char}/t{char}          ;              , 
    //在行内查找上一指定字符           F{char}/T{char}          ;              , 
    //在文档中查找下一处匹配项         /pattern<CR>              n              N 
    //在文档中查找上一处匹配项         ?pattern<CR>              n              N 
    //执行替换                      :s/target/replacement      &              u 
    //执行一系列修改                 qx{changes}q              @x            u 

    模式

      Vim 提供一个区分模式的用户界面,就是 说在Vim中按键盘上的任意键所产生的结果可能会不一样,而这取决于当前处于哪种模式 (mode)。知道当前正处于哪种模式,以及如何在各模式间切换,是极其重要的。在后面的系列文章中,这个是重中之重,也会围绕着这些来记叙。主要记叙常用的4种模式。insert,normal,command-line,visual。

    无处不在的help

      有任何的不清楚或者想知道,都可以通过h: xx,来阅读更详细的帮助信息。

      比如 

    • :h .
    • :h ;
    • :h vim-modes

      还有一个快捷键,K(Shift+k),它能给出你光标上的文本的帮助信息。


    vim统一概念很多,不可能一下子所有列举出来。会在后面的文章边学习边总结边补充。如果大家有什么好的想法也欢迎一起探讨。

    【【【版权所有,转载请注明原文链接。】】】 文中有不妥或者错误的地方还望指出,以免误人子弟。如果觉得本文对你有所帮助不妨【推荐】一下!如果你有更好的建议,可以给我留言讨论,共同进步! 再次感谢您耐心的读完本篇文章。 【【【我们所浪费的今天,是昨天死去的人奢望的明天;我们所厌恶的现在,是未来的自己回不去的曾经】】】
  • 相关阅读:
    CPU和GPU实现julia
    基于SURF特征的图像与视频拼接技术的研究和实现(一)
    验证码识别--type7
    机器视觉项目基础框架
    实现gabor filter的滤波
    神经网络研究项目--以工程师的视角
    集装箱项目
    基于海康监控的图像识别设计
    反人脸识别的思路和实现
    单向信息传输系统设计实现
  • 原文地址:https://www.cnblogs.com/ansn001/p/4642209.html
Copyright © 2011-2022 走看看