码迷,mamicode.com
首页 > 系统相关 > 详细

熟悉几个命令,脱离鼠标依赖,VIM技能升级

时间:2016-07-05 06:35:29      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:vi   linux编辑器   


如果你刚开始使用VIM,运行过vimtutor几次,是否会觉得好VIM实在太太太笨拙,简直不能理解为何它还有那么多簇拥,甚至visual studio还提供vim的插件。那其实是因为你还没有摆脱鼠标的依赖,对vim强大的命令而言,你所掌握的还是仅仅是最皮毛的而已。


如果你是初学者,可以先阅读 VIM 初学与进阶的操练及个人体验


如下介绍的几个命令(命令组合)将囊括90%的工作需求,你会发现,脱离了鼠标,其实也不是那么笨拙的一件事,而你的操作,似乎更快了有没有?


第一步:牢记光标移动命令。

1.1 假设光标当前位置在i(nt)。如何使得光标移动到|所指示的位置?

|   |     |    ||              |       |    |

    //int length = strlen(other.m_data);

1.2 光标达到行末。如何使得光标反向移动到|所指示的位置?

    //int length = strlen(other.m_data);

                  |            |


命令提示:

0   ^    2w    et=            f.      g_    $

|   |     |    ||              |       |    |

    //int length = strlen(other.m_data);

                  |            |

                  T=           F. 

0        : 到行头

^        : 到行头第一个非blank字符

$        : 到行尾

g_      : 到行尾最后一个非blank字符

w        : 按单词移动,到下一个单词开头  (提示: N<command> 重复命令N次)

e        : 按单词移动,到下一个单词结尾

f<char>: 到下一个<char>字符处

t<char>: 到下一个<char>字符前一个字符处

F/T 与f/t相同,只是反向操作。


1.3 假设光标在TODO注释行,怎样到第一行?最后一行?第N行?

      你在其他位置,怎样快速跳到TODO处, 下一个TODO,上一个TODO?

String & String::operate =(const String &other) {

    //check if it is self-assignment

    if(this == &other)

        return *this;

    //TODO: other things for copy

    //TODO: next

}



命令提示:

gg    : 到第一行

G      :到最后一行

NG    :到第N行       (提示: :set nu 显示行号    :set nu! 不显示行号)

/pattern: 搜索pattern的字符串 (如果有多个匹配 n 到下一个 N 到上一个)


重要提示:

    很多命令可以和光标移动连用,实现对一块区域的一起操作。

    <start_position><command><end_position>

    例如,

    0y$: 到行头,开始拷贝到本行最后一个字符。

    ye:   从当前位置拷贝到本单词最后一个字符。

    dt):  从当前位置删除所有内容直到遇到)。


第二步:熟悉区域选择。


2.1 <action>a<object> 和 <action>i<object> 区域操作

    action 可以是任何命令,例如d(删除),y(拷贝),v(以可视模式选择)

    object 可以是w(单词),s(句子),p(段落),或者特别字符如:),}等。   

                Lesson 2.1 Operation on block


     * <operation>a<word> <operation>i<word> : operation on a block, a word/sentence/paragraph/ or anything between ",‘,),},]


     1. Move the cursor to below line inside  helloworld.

     2. Try  the commands one by one and see what‘s the highlighted text.

        vaw     viw     (w stands for word)

        vas     vis     (sentence)

        vap     vip     (paragraph)

        va"     vi"     ("")

        va]     vi]     ([])

     3. Move the cursor back into helloword, using d(elete) and y(ank) replace v in <operation> and see what happens.


--->    function( map["helloworld"] ){

--->    //this is a comment

--->    }


2.2 假设你有如下function,你打算全部注释掉,怎样操作?

      你打算全部加上一个缩进,怎样操作?

function( map["helloworld"] ){

    var a = 10;

    //this is a comment

    return;

}


命令提示:

        ^ <Ctrl-v> <Ctrl-d> I// [ESC] [ESC]

        1. Move your curser to the beginning of the function. ^

        2. Ctrl+v    : start block selection.

        3. Ctrl+d    : move your cursor to select the whole function.

        4. I// [ESC] : Insert ‘//‘, enter ESC to make it affects to each line

       ^ <Ctrl-v> <Ctrl-d> 


第三步:自动提示 Ctrl +p 或者 Ctrl + n


第四步:分屏 :split:vsplit


                Lesson 4 Split the window


        1. :split or   :vsplit      : split the window                   ^

        2. Ctrl+w <dir>            : dir is direction, can be hjkl or <- | | ->

                                                                           v

                                     to select working window

        3. Ctrl+w q                : quit the split mode


        4. Ctrl+w_ or  Ctrl+w|     : maximize the window

        5. Ctrl+w+ or  Ctrl+w-     : increase or decrease the size of the window


怎么样,以上命令都熟悉了后,是不是GUI编辑器里你所常用的90%的操作都可轻松在vim里面轻易实现?

(以上可以看作advancedvim的解释,advancedvim是一份模仿vimtutor所创建的进阶练习教程,可以在这里下载





本文出自 “宠辱不惊 闲庭信步” 博客,请务必保留此出处http://xiaoqingandtech.blog.51cto.com/11792937/1795717

熟悉几个命令,脱离鼠标依赖,VIM技能升级

标签:vi   linux编辑器   

原文地址:http://xiaoqingandtech.blog.51cto.com/11792937/1795717

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!