vim--Linux下的文本编辑器,相当于windows系统中的记事本一样,是学习Linux不可或缺的工具,而且vim具有程序编辑的能力,可以以字体颜色辨别语法的正确性,方便shell脚本编程,还有很多额外的功能,例如支持正则表达式的搜索、多文件编辑、块复制等。



目录

  • vim的使用

  • 退出模式

  • vim的三种主要模式

  • 命令模式

  • vim的个性化配置

  • 产生.swp文件的深入解析


一、vim的使用

    vim + filename 

           编辑文件,当文件不存在的时候会在保存退出后自动创建文件

    vim + file1 + file2 + ... 编辑多个文件

            :next  下一个文件

            :prev   上一个文件

            :first   第一个

            :last    最后一个

            :wall    保存所有

            :qall    退出所有

           :wqall   保存退出所有

*******************************************************************

    vim -o + file1 + file2       多文件水平分割显示

         -O + file1 + file2       多文件垂直分割显示

         Ctrl + w,然后上或下     屏幕跳转

        

         Ctrl + w,然后v          一个文件垂直分割

         Ctrl + w,然后s          一个文件水平分割

         :qall                    全部退出


二、退出模式

    (保存退出)

              进入退出模式

         w      保存

         q      退出

         q!     强制退出,不保存

         w!     强制保存 

               当文件权限为400,文件的所属人可以使用w!

         wq,x  保存退出

         r + filename  将文件filename内容粘贴到当前文件

         w + filename  将当前文件内容存入另一个文件filename

         ! + command   将命令执行结果直接插入到相应位置

         r! + command  将命令输出结果写入在光标所在行的下一新行

         .! + command  将命令输出结果替换光标所在行内容

         ESC(按一下) 延时2秒进入命令模式

         ESC(按两下) 立即进入命令模式

         /关键词      向下搜索

         ?关键词      向上搜索

        %s/要查找的内容/替换为的内容/修饰符

        其中的分隔符/可以换成@

        修饰符:

         %    对全文生效   

          i    取消大小写

          g    全局替换,不加g每一行只替换第一次出现的


三、vim的三种主要模式

    退出模式

    插入模式

        (文本编辑)

    命令模式


四、命令模式

    (移动光标,复制,剪切,粘贴,撤销,重做,搜索,进入其他模式)

      h(左)l(右)k(上)j(下)       移动光标

      w       单词间移动

      H       跳转至页首

      L       跳转至页尾

      M       跳转至页中间

      gg      文件的首行

      G       文件的尾行

          数字 + G 跳转至第几行  或者 退出模式下 数字 + enter

      i       在光标所在位置进入插入模式

      I       在光标所在行的行首进入插入模式

      a       在光标所在位置的后一个字符进入插入模式

      A       在光标所在行的行尾进入插入模式

      o       在光标所在行的下一行创建空白行并进入插入模式

      O       在光标所在行的上一行创建空白行并进入插入模式

      ZZ      保存退出

      ZQ      不保存退出

      u       撤销,最终至文件打开时候的状态

      U       直接撤销至文件打开时候的状态(仅对一行内容有效,修改期间换行则失效)

      .       重复上一个操作

      e!      将文件直接恢复到打开状态

      v       从光标开始的位置上下左右选中内容(针对字符)

      V       从光标所在行的位置上下选中整行(针对行)

      r + 任一字符  替换

      R       进入替换模式。可以多个字符修改

      dd      剪切光标所在行内容

      dw      剪切光标所在的整个单词

      yy     复制光标所在行内容

      yw      复制光标所在的整个单词

      p       在光标所在行的下一行粘贴或者光标所在处向后

      P       在光标所在行的上一行粘贴或者光标所在处向前

      Ctrl + f  向下翻屏

      Ctrl + b  向上翻屏

      Ctrl + d  向下翻半屏

      Ctrl + u  向上翻半屏


五、vim的个性化配置

    /etc/vimrc   针对所用用户

    ~/.vimrc     针对指定用户

    (先/etc/vimrc再~/.vimrc,后者的效果会覆盖前者的效果)

    set number 或者 set nu     显示行号

    set nonumber 或者 set nonu 取消显示


    set ai       自动缩进

    set noai     取消缩进 

 

    set list     显示Tab键为^I和换行符为$ 

         可以区分Tab、空格、换行

    set nolist  取消

    但是上述的配置会在退出之后设置不予保存,可以:

     vim /etc/vimrc

     set ai/nu/list 添加到第一行

     wq保存退出

     永久设置成功


六、产生.swp文件的深入解析

    有时候我们利用vim编辑文件,会出现Swap file ".xxx.swp" already exists!的字样。下面来分析这种情况:

      ①利用watch命令,可以动态的刷新一条命令的输出结果,

        在终端1下输入watch -n 1 ls -al /app 每隔一秒刷新/app目录下的情况

      ②然后打开另一终端(命名为终端2)输入vim /app/fstab

       发现终端1出现了.fstab.swp文件

      ③当我们编辑fstab之后,正常保存退出或者直接退出,终端1的.fstab.swp文件不在了

      ④我们联想下命令模式下为什么u可以一直撤销至最终打开的状态;当我们对fstab文件不停地大量修改的时候,我们发现终端1的.fstab.swp文件大小一直增大,fstab文件大小不变。

      ⑤再打开一终端(终端3),输入killall vim,即表示非正常退出,终端1的.fstab.swp仍然存在

      ⑥在终端2输入cat fstab,结果显示的是文件没有修改之前的内容,即没有保存

    最终得出:当.fstab.swp存在时,vim fstab会出现Swap file ".xxx.swp" already exists!字样{一种情况是另一个用户正在编辑,一种情况就是上次编辑非正常退出}

    其实这个文件存放着上次修改文件但未保存的内容

      ⑦如果想正常编辑fstab文件,可以在终端2输入vim -r fstab,出现提示按enter

       发现终端1出现了一个.swp.swo文件

    这是因为原来的.swp没有删除,再次编辑fstab文件时,会再次出现一个.swp文件,但是.swp文件已经存在,所以只能用另外一个名字.swo(防止重名)

      ⑧这次:wq正常退出之后,.fstab.swo消失

      ⑨对于最后的.fstab.swp文件我们可以rm .fstab.swp删除

      也可以vim fstab进入之后输入D选项然后正常保存退出