VIM 小技巧
(54)

1、vim编辑器
基本介绍

  vim编辑器的前身叫做vi。vi的英文名:Visual Interface。中文解释文本编辑器,你不应该用他去打开二进制可执行文件

文本编辑器种类

  行编辑器

    sed

  全屏编辑器

    nano

    vi

    vim:Vi IMproved

      基本使用

        vim是一个模式化编辑器

        vim编辑器默认打开文件后是编辑模式或者命令模式

      vim的基本模式

        编辑模式、命令模式

        输入模式

        末行模式

        可视化模式

      基本介绍

        vim内建了很多子命令,即内置了命令行接口,可以通过打开末行模式来执行vim内置的命令

        vim打开文件的语法
          vim [options] [file ..]

          vim [options] -

           vim [options] -t tag

           vim [options] -q [errorfile]

        常用选项

          +num:打开文件后,直接让光标处于第num行。如果只有加号,没有num表示打开文件处于文件的最后一行

            使用案例

              vim + /tmp/fstab

              vim +10 /tmp/fstab

           +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首

    vim模式转换

      编辑模式转换到输入模式,需要键入的符号

        i:英文名insert,在光标所在处前面输入

        a:英文名,append,在光标所在处后面输入

        o:在当前光标所在行的下面打开一个新行,并转换为输入模式

        I:在光标所在行的行首输入.如果光标处于不在行首,那么他会移动到行首并转换为输入模式

        A:在光标所在行的行尾输入.如果光标处于不在尾首,那么他会移动到行尾并转换为输入模式

        O:在当前光标所在行的上面打开一个新行,并转换为输入模式

        c:

        C:

      输入模式转换到编辑模式,需要键入的符号

        ESC

      编辑模式转换到末行模式

        :

      末行模式转换到编辑模式

        一次ESC,这个如果在末行模式输入有命令,那么键入一次ESC不能快速回到编辑模式

        两次ESC可以快速回到编辑模式

    关闭文件方式

      在末行模式下,键入命令

        不保存退出

          q:直接退出,不保存

          q!:强行退出

        保存退出

          wq:保存退出

          x:保存退出

          w PATH:将当前文本内容另存到PATh这个路径下

      在编辑模式下,键入命令

        保存退出

          ZZ:保存退出

  vim中快速实现光标跳转

    字符间跳转

      h:向左跳一个字符

      j:向下跳一个字符

      k:向上跳一个字符

      l:向右跳一个字符

    一次跳过指定的字符

      num h:向左跳num个字符

      num k:向上跳num个字符

      num j:向下跳num个字符

      num l:向右跳num个字符

    单词间跳转

      w:跳转到后一个单词的词首

      e:跳转到当前或者后一个单词的词尾。如果当前光标不在当前光标所在单词的词尾时,跳转到当前光标所在单词的词尾;如果当前光标在当前光标所在单词的词尾,那么跳转到后一个单词的词尾

      b:跳转到前一个单词的词首,如果光标不在一个单词的词首时,跳转到当前光标所在单词的词首

    行首行尾跳转(编辑模式下)

      ^:跳转至行首的第一个非空白字符

      0:跳转到行首

      $:跳转至行尾

    行间移动(编辑模式下)

      num G:跳转到第num行

      G:跳转最后一行

      1G或者gg:跳转到第一行

    句间移动

      ):跳转到下一个句子

      (:跳转到前一个句子

    段落间移动

      }:跳转到后一个段落

      {:跳转到前一个段落

  vim编辑命令

    字符编辑(末行模式下)

      字符的删除

        x:删除光标所在处的字符

        num x:删除光标所在处向后num个字符

        d + 行间移动|句间移动|段落间移动|行首行尾移动|单词间移动:d键加上行间移动|句间移动|段落间移动|行首行尾移动|单词间移动的字符可以实现范围删除

          案例演示

            删除光标所在位置到下一个单词之间的字符

              键入d+w

            删除光标所在位置到行尾之间的字符

              键入d+$

            删除光标所在位置到行首之间的字符

              键入d+0

            删除光标所在位置到下一段之间的字符

              键入d+}

      交换字符位置

        x + p:交换光标所在的字符和后边字符的位置

     行的删除(编辑模式下)

      dd:删除光标所在行

      num + dd:删除num行

      DD:删除光标所在行,并且新建空白行到光标所在位置

        注意:删除的内容都保留到了一个缓冲区,如果要撤回,键入u

      粘贴命令(编辑模式下)

        p:(小写)英文名paste,缓存区如果为整行内容,则如果粘贴,那么粘贴到当前光标所在行的下面。如果不是整行,则粘贴到当前光标所在处的后边

        P:(大写P)。如果缓存区为整行,那么粘贴时粘贴到当前光标所在行的上面行。如果不为整行,那么粘贴到光标所在处的前面

        num + p 或者num + P:一次性粘贴多次

      复制命令(编辑模式下)

        y + 行间移动|句间移动|段落间移动|行首行尾移动|单词间移动:y键加上行间移动|句间移动|段落间移动|行首行尾移动|单词间移动的字符可以实现范围复制

          使用案例

            复制光标所在处到光标所在行的行尾之间的字符

              y+$

            复制光标所在处到光标所在行的行首之间的字符

              y+0

            复制光标所在处到光标所在单词的后一个单词之间的字符

              y+e

            yy:复制整行(复制的是单行)

              num + yy:复制num行

      改变命令(编辑模式)

        c + 行间移动|句间移动|段落间移动|行首行尾移动|单词间移动:c键加上行间移动|句间移动|段落间移动|行首行尾移动|单词间移动的字符可以实现范围删除,并且从编辑模式进入输入模式

          使用案例

            删除光标所在处到光标所在行的行尾之间的字符

              c+$

            删除光标所在处到光标所在行的行首之间的字符

              c+0

            删除光标所在处到光标所在单词的后一个单词之间的字符

              c+e

          cc:删除整行(复制的是单行)并且从编辑模式进入输入模式

          num + cc:删除num行,并且从编辑模式进入输入模式

      替换命令(编辑模式下)

        r char:替换光标所在处的字符

        num + r键 + char:将光标所在位置向后指定num个字符全部替换成char字符

          使用案例

            将光标所在位置向后10个字符全部替换成a字符

              10 + r + a

      撤销命令

        u:英文名Undo,撤销此前的操作

        num + u:撤销num次操作

        ctrl+r:撤销以后后悔了,这个命令是为了执行撤销的撤销操作

        重复前一个编辑操作

          .(点号)

  可视化模式

    在编辑模式下按小写或者大写v键可以进入可视化模式

      v:(小写),可以使用方向键选中我们要的内容

      V:(大写)。可以使用方向键选中我们要的内容

        小写和大写v的区别

          小写v当我们使用方位键时不会整行整行的选中,而大写v则会整行整行的选中

    通过可视化模式选中的内容可以结合编辑模式下的任何命令,比如:替换命令、复制命令、删除命令等进行一些操作

      使用案例

        进入可视化模式,选中一部分内容进行复制

          v+方位键+y

    vim实现翻屏操作

      ctrl+f:项文件的尾部翻一屏

      ctrl+b:项文件的首部翻一屏

      ctrl+d:向文件的尾部翻半屏

      ctrl+u:项文件的首部翻半屏

    vim自带的练习教程

      vimtutor命令

  vim末行模式

    vim内建了命令行模式,它具有的功能如下

    地址定界

      start_pos,end_pos:表示第start_pos行到end_pos行的内容

      start_pos:表示第start_pos行

      start_pos,+num:表示从第start_pos行开始向后多加num行之间内容

        使用案例

          表示是删除第一行向后再输20行的内容

            :1,+20d

      .(点号):表示当前行

      $:表示最后一行

      %:表示全文,相当于1,$

      start_pos,end_pos - num:表示从第start_pos行开始到end_pos行的前num行,也就是到了end_pos行后向前走num行,即end_pos行减num行

      /PATTERN1/,/PATTERN2/:从第一次被PATTERN1模式匹配到的行开始,一直到第一次被PATTERN2匹配到的行结束之间的行

        使用案例

          第一次匹配name所在的行开始,到最后一行结束,之间的行的内容

            /name/,$

          第一匹配Go.g$所在行开始,到第一次匹配na.一行作为结束。之间的行的内容

            /Go.*g$/,/na.#fzs#

      vim的地址定界后边可以接任何编辑模式下的命令。

        使用案例

          第一匹配Go.g$所在行开始,到第一次匹配na.一行作为结束。删除之间的行的内容

            /Go.*g$/,/na.#fzs#d

          第一次匹配name所在的行开始,到最后一行结束,拷贝