vim简单实用的技巧总结

vi 和 vim无需过多的区分,vim可认为是vi的增强版。

       这篇关于vim的手册,我个人觉得实在无法把它写成文章,只能以手册的方式列举出来,
因为,vim是一个动手使用的工具,只能在使用中你才能慢慢发现它的操作多么符合逻辑,
我从下面这些简略的描述中,尽量将它的操作步骤写出来,但更重要的是你必须在使用过程中去尝试,
才会发现更多有趣的功能。

vim的配置文件:

        /etc/vimrc :这个配置文件到设置对所有用户生效。
        ~/.vimrc   :vim在家目录中有一个配置文件,将自定义到map ,  ab , set设置都可以直接加入其中,每次使用vim时都生效此文件可自己手动创建。

 注:修改默认编辑器为:vim
  EDITOR=vim
  export  EDITOR

vim使用必须知道它主要的三种模式:【注意:下面所有操作使用的字母均区分大小写】

     0. 所有模式的退出都是按 ESC 键
    vim下删除实际为剪切

     1. 命令模式 :可输入内部指令也可进行复制删除移动等操作,不过这种方式通常适合于查找替换,直接导入命令结果,打开多文件同时编辑等。
            切入方法:在末行模式下,输入“冒号”,即可进入
     
     2. 输入模式:这是正常的编辑文件内容时的状态。
            切入方法比较多:

      1. i :从当前光标位置开始进入编辑状态。    I :先回到行首在进入编辑状态。
      2. a :将光标向前移一个字符后进入编辑状态。 A :先到行尾,在进入编辑状态。
      3. s :先删除当前光标处字符,再进入编辑状态。S :先删除当前行,在进入编辑状态。
      4. cc :先删除当前行,在进入编辑状态。     C :从当前光标处删除到行尾,在进入编辑状态。
      5. o :先向下插入新空白行,在进入编辑状态。 O :先向上插入新空白行,在进入编辑状态。

 

     3. 末行模式:刚用vim打开文件时就处于末行模式。
                 在末行模式下可以直接输入内部命令来移动光标,删除,恢复,复制等操作。

     查找
        切入方法:直接按 /
     替换编辑模式:此模式仅用来替换使用
        切入方法:按 R 
                按 r :不会进入替换编辑模式,它是直接替换单个字符。
     多行选取模式:【可进行复制,删除】
        切入方法:按 大V, 然后按上下键选择多行进行选取;小v :是从光标当前位置开始多行选取。
                 接着,按 y | d 可进行复制或删除;
                 最后,按 p 即可粘贴。
     块选取模式:【可进行复制,删除】
        切入方法:按 Ctrl + 小v, 然后按上下左右键来选择操作的块。
                 接着,按 y | d 可进行复制或删除;
                 最后,按 p 即可粘贴。
     注:块复制的一个实用的小技巧:
      多行快速注释:
       > 先移到行首,按ctrl + v,
       > 将需要注释掉的行的行首都选中
       > 按 大I,进入输入模式
       > 接着输入 注释符号 如 #,// ....
       > 最后,同时按两次 ESC键,即可。

编辑操作:

末行模式:
  gg :快速到全文开头       G :快速到全文末尾
  Y | yy :复制一行。      number + Y | yy :同时复制number行。
  p :粘贴到当前行下面      P :粘贴到上当光标的上一行。
  dd :删除一行。          number + dd : 同时删除number行。
  D  :从光标当前位置删除到行尾 
  x  : 删除光标右边的字符   X : 删除光标左边的字母
  u  :撤销
  ctrl + r :重做
  
命令模式:
  :20,100 {[copy |move 200] delete }  -->将20~100的内容复制到201行处。
             copy可简写为co
             move可简写为mo
             delete可简写为del 
  :r /etc/shadow    -->将/etc/shadow读入到当前光标所在处
  : ! ls /usr/local  -->不退出vim,来执行命令。
  :r ! grep mysql /etc/passwd    -->将命令执行结果插入到当前光标处
    
保存退出:
  :wq | ZZ  -->表示保存退出
  ctrl + z :将当前编辑文件调入后台。使用fg调回前台。
  ctrl + g :显示光标在当前文件的位置信息
  :q!       -->不保存退出
  :w  /tmp/abc.txt   -->另存为/tmp/abc.txt
  :10,$w  /tmp/tail.txt  -->将文件从第10行到文件尾,另存为/tmp/tail.txt
  :X   -->对文件加密存储
  :e!  -->重新读入当前文件

 开启vim的功能:
  :set nu  开启行号显示       
  :set nonu  关闭行号显示
  :set ts=4 设置tab键为4个字符的空挡
  :set smartindent  开启vi的自动缩进功能 
  :set nosmartindent  关闭自动缩进功能 
  :set sw=4 设置自动缩进的空挡为4个字符
  :set list  查看隐藏字符
查找替换:
  操作方法:
 1. 进入命令模式
 2. 格式:[range]s/<pattern>/<string>/[args]
  例: 要替换全文中所有abc为123,且忽略大小写.
          :%s/abc/123/gi
      仅替换21~50行之间所有的abc为Ab123  
          :21,50s/abc/Ab123/Ig
      从当前行向下10都注释掉
          :.,+10s/^/#/g
  参数说明:
   range:
     空:表示仅对当前行进行查找替换
     % : 对全文进行查找替换
     Row : 仅对指定行号的行进行查找替换
     Row1,Row2 : 对一个行号范围进行查找替换
     args : 它的取值可以是下列之一 或  组合。
       空  :仅替换该行第一个匹配字符串
       g   : 替换该行所有匹配的字符串
       i   :忽略大小写
       I   : 不忽略大小写
       c   : 每个替换都需要确认
扩展:
  dG : 从当前位置删到全文尾    yG : 从当前位置复制到全文尾
  dgg : 从当前位置删到全文首   ygg :从当前位置复制到全文首
  d^ : 从光标当前位置删到行首   y^ : 从光标当前位置复制到行首
  d$ : 从光标当前位置删到行尾  y$ : 从光标当前位置复制到行尾
  dw :删除光标右边位置的单词  yw :复制光标右边位置的单词
  db :删除光标左边位置的单词  yb :复制光标左边位置的单词
  dNw :删除光标右边N个的单词  yNw :复制光标右边N个的单词
  dNb :删除光标左边N个的单词  yNb :复制光标左边N个的单词
  
  删除空行:
   :%s/^\n//g
   :g/^$/d      -->删除空行
   :g/^\s*$/d   -->删除任意空行
  
  标记点复制删除移动:
   操作方法:
    0. 进入末行模式
    1. 先将光标移动操作行的任意位置,接着按 ma
    2. 将光标移动到区间的结束行的任意位置,按 mb
    3. 根据操作:
     》若为 删除,则 进入命令模式,:'a,'b del  -->注:是单引号+a,单引号+b
     》若为 复制或移动,则在全文中任意位置,按 mc
      接着进入命令模式, :'a,'b [copy | move] 'c 
      
  vim启动时直接定位到指定行:
       vim +  /var/log/message     -->启动时直接定位到文件尾。
       vim +行号  /var/log/message  -->启动时直接定位到指定行。
   
  多文件并行编辑:
   :sp a.txt  -->将当前编辑窗口平均分成上下两块,在上半块显示a.txt,
        使用ctrl + w + w,在多个窗口间切换。
   :vsp a.txt -->将当前编辑窗口平均分成左右两块,在左半块显示a.txt,
        使用ctrl + w + w,在多个窗口间切换。
   或
   vim -O  1.txt  2.txt  3.txt  -->大O参数,可同时编辑三个文件,
        使用ctrl + w + w,在多个窗口间切换。
   vimdiff  1.txt  2.txt    -->在vim编辑器中显示出两个文件的不同之处。
  
  定义快捷键:
   操作方法:
    1. 进入命令模式
    2. :map  ^P  I#<ESC>:  -->注意:^P 这个尖角号在Vi中是通过:
                            按ctrl+v 再按ctrl+p才出来^P的 或 按ctrl + v + p也可。
     表定义了一个快捷键ctrl+P,只有按ctrl+P则执行将光标移到行首,并插入#号,再退回到命令模式。
     【i:插入,#:要插入的字符,<ESC>:退出标志】
      例:
       定义了一个快捷键ctrl+D,执行操作为:将光标移到行首,并删除第一个字符,如:#
         :map  ^D  ^x 
       定义一个快捷键ctrl+E,在光标所在处插入我的邮箱。
         :map  ^E  
   取消快捷键:unmap  ^P 
  
  将a替换为b :
   操作方法:
    1. 进入命令模式
    2. :ab  mymail  
    3. 在正文中任何位置,输入mymail,按空格 或 回车即可快速替换为
 
   取消方法:unab  mymail

 

行间移到操作:
                    k :向上
                    5k :向上移到5行
                    命令模式下,再按 +number 回车可以当前行为基准向上移到number行。
 h : 向左                                            l :向右
 5h:左移5个字符                            5l:向右移5个字符
 5b: 左移5个单词                              5w:右移5个单词
                   number + 空格: 向右移动指定字符数。
                   j :向下
                  5j:向下移到5行
                  number + 回车 :向下翻指定行
                  命令模式下,再按 -number 回车可以当前行为基准向下移到number行。

快速移到行首和行尾
  操作方法:
       编辑:  直接按 大I,可快速移到行首并进入编辑状态,按 大A,可快速到行尾并进入编辑状态。
       非编辑:直接按 ^ 可快速跳到行首, $ 可快速跳到行尾。
        
快速定位到当前行中指定的字母处
        操作方法:
              正向跳转:则在光标所在行的任意位置, 按 f ,再按要跳到的字母即可快速跳转到。
              反向跳转:则在光标所在行的任意位置, 按 F ,再按要跳到的字母即可快速跳转到。
 
段落间跳转:
        操作方法:
              在全文的任意位置, 按 { 可跳转到上文中第一个空白行隔断处; 按 } 可跳到下文中第一个空白行隔断处。
              此功能非常适合快速复制 | 删除 整个函数
                    操作方法:先移到函数头或尾的空白行处, 以尾为例,先按 { 到函数头部第一个空白行,
                              再按 y | d , 最后按 } 再跳到函数尾,即可复制或删除一整个函数。
 
自动匹配最近的一对圆括号 或 花括号,非常适合复制整个函数体
  操作方法:
   复制或删除函数体:将光标移到到函数体的 花括号上,按:y%  或  d%
   复制或删除函数头:将光标移到到函数名首字母处,按 y%  或  d%
 
定界符内的字符快速复制,剪切,删除:
        定界符:如 "/a/b/c", '/etc/a', function(a,b), <html  …/>
        类似上面这种定界符内的字符均可操作:
         方法:
            1. 先将 光标移到到定界符内部任意位置,
            2. y : 复制,  d: 剪切,删除, c: 删除或剪切 并 直接进入编辑模式
                i :即inner,表示要操作对象内部的文本
                a : 即all,表示要操作整个对象的文本
            3. 直接按 y + i 或 a +定界符的两端任何一个,即可剪切或复制。
                如:
                    <html  …/> ,
                        若仅剪切<>内部的字符,方法是直接将光标移到<>内部,按 di> 或 di< 即可。

翻屏操作:
    ctrl + f :向下翻屏幕   ctrl + d: 向下翻半屏幕
    ctrl + b :向上翻屏幕   ctrl + u: 向上翻半屏幕 
  
   快速将光标所在行移到到行屏幕顶或尾或中间:
        操作方法:

            将光标移到全文中任意位置,
             按   zt ,可将当前光标所在处置于屏幕顶;
                   z+回车 ,可将当前光标所在处置于屏幕顶;
             按  zb ,可快速光标所在处置于屏幕低;
                   z+减号 ,可将当前光标所在处置于屏幕低;
             按  zz ,可将当前光标所在处置于屏幕中间位置。
        注:此方法可配合 H, M, L 来方便快速翻页:
                H :快速移到到屏幕顶。
                M :快速移到到屏幕中间
                L  :快速移到到品名低。
 
 
  切换光标处字母的大小写:
        操作方法:

            将光标移到到字母上,按 ~
  增减光标处的数字:
        操作方法:
            增加数字:将光标移到到数字上,按 ctrl + a
            减小数字:将光标移到到数字上,按 ctrl + x
   重复前一次操作:
        操作方法:

            刚刚操作过的动作,若想再次做,则可直接,按 点号 "."

 

原创文章,作者:Wn1m,如若转载,请注明出处:http://www.178linux.com/8117

(0)
Wn1mWn1m
上一篇 2015-09-14
下一篇 2015-09-14

相关推荐

  • 从案例出发——命令总结之find篇

    在这篇文章中你将看到以下内容:1、find命令的格式、语法、及实际应用 2、3个时间戳的意义  3、各种文件类型的解释  4、软硬链接的区别 5、exec和xargs的区别 6、几个逻辑判断符的意义  7、通配符的意义  8、find 命令下时间查找的特殊定义 首先,来看看以下题目:   &nbsp…

    Linux干货 2016-03-25
  • N22-第十一周作业

    1、详细描述一次加密通讯的过程,结合图示最佳。 (1)数字签名 A与B通信,B发给A一段数据,为了证明数据确实是B发送过来的,B首先会用单向加密算法从数据中提取一段特征码,然后用自己的私钥加密这段特征码和原始数据后,发送给A;A接受到数据,首先用B的公钥解密,获取到特征码和原始数据;然后用同样的单向加密算法从原始数据中提取一段特征码,与之前用公钥解密得到的特…

    Linux干货 2016-11-01
  • Zabbix-3.2.3实现微信(WeChat)告警

    Zabbix-3.2.3实现微信(WeChat)告警 zabbix Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。 关于邮件报警可以参考:Zabbix Web 邮件报警 一、微信企业号申请 地址: …

    2017-04-21
  • 三大家族轻松管理CentOS 7网络属性配置

    一、简单介绍        在CentOS 7中对网络管理还是有不少变化的,例如管理服务的命令变为systemctl,许多命令可以更改后直接生效,还有许多独有的工具,本文以CentOS 6与CentOS 7对比进行讲解,下面现总体介绍一下网络属性配置工具。    &nb…

    Linux干货 2016-04-25
  • 广域网中的DNS服务

    拓扑图                      创建主DNS:     配置文件/etc/named.conf&nbs…

    2017-04-15
  • shell脚本语言中的选择执行

    shell脚本语言中的选择执行 概述 程序执行过程分为顺序执行、选择执行和循环执行。顺序执行是指程序按照步骤一步一步地运行。选择执行是指程序根据特定条件选择两项或者多项中的一项运行。循环执行是指程序根据特定条件重复执行直到某个节点结束,继续运行其他步骤。本篇文章从判断条件和条件判断式简要说明shell脚本语言中程序选择执行的用法。 shell脚本中的判断条件…

    Linux干货 2017-04-17