• Linux文本编译工具VIM详解


                  Linux文本编译工具VIM详解

                                               作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.VIM概述

    1>.vim简介

    1>.vi: 
      全称Visual editor,即文本编辑器,历史悠久,基本上最小化安装就该命令。
    
    2>.文本:ASCII, Unicode 
    
    3>.文本编辑种类:  
        行编辑器:sed  
        全屏编辑器:nano, vi,vim 
    
    4>.vim   
        全称:VIsual editor iMproved,是对vi的一个版本的增强(比如语法高亮,),最小化安装的时候并没有按照该命令而是需要手动安装。
        官网:https://www.vim.org/
    
    5>.其他编辑器:  
        gedit  一个简单的图形编辑器  
        gvim  一个Vim编辑器的图形版本 

    2>.打开文件

    vim [OPTION]... FILE...  
      +# 打开文件后,让光标处于第#行的行首,+默认行尾
      +/PATTERN 让光标处于第一个被PATTERN匹配到的行的行首
      –b file 二进制方式打开文件
      –d file1 file2… 比较多个文件
      -m file 只读打开文件

    vim -e file 或 ex file 直接进入ex模式

    如果该文件存在,文件被打开并显示内容

    如果该文件不存在,当编辑后第一次存盘时创建它

    3>.vim:一个模式编辑器 

    击键行为是依赖于 vim的 的“模式” 

    三种主要模式:
      命令(Normal)模式:默认模式,移动光标,剪切/粘贴文本
      插入(Insert)或编辑模式:修改文本
      扩展命令(extended command )模式:保存,退出等

    Esc键 退出当前模式

    Esc键 Esc键 总是返回到命令模式

    4>.vim模式 

    5>.模式转换 

    命令模式 --> 插入模式  
      i insert, 在光标所在处输入  
      I 在当前光标所在行的行首输入  
      a append, 在光标所在处后面输入  
      A 在当前光标所在行的行尾输入  
      o 在当前光标所在行的下方打开一个新行  
      O 在当前光标所在行的上方打开一个新行
    
    插入模式 --------> 命令模式
      ESC
    
    命令模式 --------> 扩展命令模式
      :
    
    展命令模式 --------> 命令模式
      ESC,enter 

    6>.关闭文件

    扩展命令模式:  
      :q 退出
      :q! 强制退出,丢弃做出的修改
      :wq 保存退出
      :x 保存退出

    命令模式
      ZZ 保存退出
      ZQ 不保存退出

     

    二.扩展命令模式 

    按“:”进入Ex模式  
    
    创建一个命令提示符: 处于底部的屏幕左侧
    常见命令:   
    w 写(存)磁盘文件   wq 写入并退出   x 写入并退出   q 退出   q! 不存盘退出,即使更改都将丢失   r filename 读文件内容到当前文件中   w filename 将当前文件内容写入另一个文件   !command 执行命令   r!command 读入命令的输出

    三.命令模式光标跳转 

    字符间跳转:  
      h: 左 
      l: 右  
      j: 下 
      k: 上  
      #COMMAND:跳转由#指定的个数的字符 
    
    单词间跳转:  
      
      w:下一个单词的词首  
      e:当前或下一单词的词尾  
      b:当前或前一个单词的词首  
      #COMMAND:由#指定一次跳转的单词数 
    
    当前页跳转:  
      H:页首     
      M:页中间行     
      L:页底  
      zt:将光标所在当前行移到屏幕顶端  
      zz:将光标所在当前行移到屏幕中间  
      zb:将光标所在当前行移到屏幕底端 
     
    行首行尾跳转:  
      ^ 跳转至行首的第一个非空白字符  
      0 跳转至行首  
      $ 跳转至行尾 
    
    行间移动:  
      #G 或者扩展命令模式下:#   跳转至由第#行  
      G   最后一行  
      1G, gg 第一行 
    
    句间移动:  
      )  下一句 
      (  上一句 
    
    段落间移动:  
      }  下一段 
      {  上一段 

    四.命令模式翻屏操作 

    Ctrl+f 向文件尾部翻一屏 

    Ctrl+b 向文件首部翻一屏

    Ctrl+d 向文件尾部翻半屏

    Ctrl+u 向文件首部翻半屏

    五.命令模式操作 

    字符编辑:  
      x 删除光标处的字符
      #x 删除光标处起始的#个字符
      xp 交换光标所在处的字符及其后面字符的位置
      ~ 转换大小写
      J 删除当前行后的换行符

    替换命令(r, replace)
      r 替换光标所在处的字符
      R 切换成REPLACE模式

    删除命令: 
      d 删除命令,可结合光标跳转字符,实现范围删除 
      d$ 删除到行尾 
      d^ 删除到非空行首 
      d0 删除到行首 
      dw 
      de 
      db 
      #COMMAND

    dd:删除光标所在的行 
      #dd 多行删除

    D:从当前光标位置一直删除到行尾,等同于d$ 


    复制命令(y, yank): 
      y 复制,行为相似于d命令 
      y$ 
      y0 
      y^ 
      ye 
      yw 
      yb 
      #COMMAND
    yy:复制行 
      #yy 复制多行

    Y:复制整行 

    粘贴命令(p, paste):

      p 缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘 贴至当前光标所在处的后面

      P 缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘 贴至当前光标所在处的前面

    改变命令(c, change)  
      c: 修改后切换成插入模式

    命令模式 --> 插入模式 
      c$ 
      c^ 
      c0 
      cb 
      ce 
      cw 
      #COMMAND

    cc:删除当前行并输入新内容,相当于S 
      #cc   

    C:删除当前光标到行尾,并切换成插入模式 

    六.命令模式:操作文本 

    七.命令模式 

    10iyinzhengjie [ESC] 粘贴“yinzhengjie”100次 
    
    <start position><command><end position> 
    
    常见Command  
      y 复制
      d 删除
      gU 变大写
      gu 变小写 
    例如: 0y$ 命令 
      
      0 → 先到行头 
      y → 从这里开始拷贝 
      $ → 拷贝到本行最后一个字符   

    di"   光标在”“之间,则删除”“之间的内容
    yi(   光标在()之间,则复制()之间的内容
    vi[   光标在[]之间,则选中[]之间的内容
    dtx  删除字符直到遇见光标之后的第一个 x 字符
    ytx  复制字符直到遇见光标之后的第一个 x 字符 

    八.扩展命令模式:地址定界 

    地址定界  
      :start_pos,end_pos  
      # 具体第#行,例如2表示第2行  
      #,# 从左侧#表示起始行,到右侧#表示结尾行   
      #,+#  从左侧#表示的起始行,加上右侧#表示的行数   
        示例:2,+3  表示2到5行  
      .   当前行  
      $  最后一行   
        .,$-1 当前行到倒数第二行  
      %  全文, 相当于1,$   
    
    /pattern/ 匹配pattern的行
    /pat1/,/pat2/
      从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
      #,/pat/
      /pat/,$
    
    使用方式:后跟一个编辑命令
      d
      y
      w file: 将范围内的行另存至指定文件中
      r file:在指定位置插入指定文件中的所有内容 

    九.命令模式:查找 

    查找  
      /PATTERN:从当前光标所在处向文件尾部查找
      ?PATTERN:从当前光标所在处向文件首部查找
      n:与命令同方向
      N:与命令反方向

    十.命令模式:撤消更改 

      u 撤销最近的更改 
      #u 撤销之前多次更改
      U 撤消光标落在这行后所有此行的更改
      Ctrl - r 重做最后的“撤消”更改
      . 重复前一个操作
      #. 重复前一个操作#次

    十一.vim的寄存器 

    有26个命名寄存器和1个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享 
    
    寄存器名称a,b,…,z,格式:“
      寄存器放在数字和命令之间  如:3"tyy 表示复制3行到t寄存器中,"tp  表示将t寄存器内容粘贴 
    
    未指定,将使用无命名寄存器

    有10个数字寄存器,用0,
    1,…,9表示,0存放最近复制内容,1存放最近删除内容。 当新的文本变更和删除时,1转存到2,2转存到3,以此类推。数字寄存器不能在不同会话间共享

    十二.标记和宏(macro) 

      ma   将当前位置标记为a,26个字母均可做标记, mb 、 mc 等等 
      'a      跳转到a标记的位置,实用的文档内标记方法,文档中跳跃编辑时很有用 
      qa    录制宏 a,a为宏的名称 
      q      停止录制宏  
      @a    执行宏 a 
      @@   重新执行上次执行的宏 

    十三.扩展命令模式:查找并替换 

    在扩展命令模式下完成查找替换操作  
      格式:s/要查找的内容/替换为的内容/修饰符
      要查找的内容:可使用模式
      替换为的内容:不能使用模式,但可以使用1, 2, ...等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容
      修饰符:
        i 忽略大小写
        g 全局替换,默认情况下,每一行只替换第一次出现
        gc 全局替换,每次替换前询问

    查找替换中的分隔符/可替换为其它字符
      s@/etc@/var@g
      s#/boot#/#i

    十四.编辑二进制文件 

    以二进制方式打开文件  
      vim -b binaryfile

    扩展命令模式下,利用xxd命令转换为可读的十六进制
      :%!xxd

    插入模式下,编辑二进制文件

    扩展命令模式下,利用xxd命令转换回二进制
      :%!xxd -r

    保存退出

    十五.可视化模式 

    允许选择的文本块  
      v 面向字符  
      V 面向行  
      ctrl-v 面向块 
    
    可视化键可用于与移动键结合使用   
      w  )   }   箭头等 
    
    突出显示的文字可被删除,复制,变更,过滤,搜索,替换等

    十六.使用多个“窗口” 

    多文件分割  
      vim -o|-O FILE1 FILE2 ...
        -o: 水平分割
        -O: 垂直分割
        在窗口间切换:Ctrl+w, Arrow

    单文件窗口分割
      Ctrl+w,s:split, 水平分割
      Ctrl+w,v:vertical, 垂直分割
      ctrl+w,q:取消相邻窗口
      ctrl+w,o:取消全部窗口
      :wqall 退出

    十七.定制vim的工作特性 

    配置文件:永久有效  
        全局生效:/etc/vimrc  
        个人生效:~/.vimrc(推荐) 
    
    扩展命令模式:当前vim进程有效 
    (1) 行号  
        显示:set number,简写 set nu  
        取消显示:set nonumber, 简写 set nonu 
    (2) 忽略字符的大小写  
        启用:set ignorecase,简写 set ic  
        不忽略:set noic 
    (3) 自动缩进  
        启用:set autoindent,简写 set ai  
        禁用:set noai 
    (4) 复制保留格式  
        启用:set paste  
        禁用:set nopaste 
    (5) 显示Tab和换行符 ^I 和$显示  
        启用:set list  
        禁用:set nolist 
    (6) 高亮搜索  
        启用:set hlsearch  
        禁用:set nohlsearch 
    (7) 语法高亮  
        启用:syntax on  
        禁用:syntax off 
    (8) 文件格式
        启用windows格式:set fileformat=dos
        启用unix格式:set fileformat=unix
        简写 set ff=dos|unix
    (9) 设置文本宽度
        set textwidth=65 (vim only)
        set wrapmargin=15
    (10) 设置光标所在行的标识线
        启用:set cursorline,简写 set cul
        禁用:set nocursorline 

    十八.了解更多

    Set 帮助 
      :help option-list  
      :set or :set all 
    
    vi/vim内置帮助   
      :help  
      :help topic
       Use :q to exit help 
    
    vimtutor命令
    
    菜鸟教程:https://www.runoob.com/linux/linux-vim.html

  • 相关阅读:
    不懂不可耻,可耻的是每当遇到不懂的东西不是想办法去学去了解而是极力掩饰。
    在咱学校的论坛上看到的一句话,觉得……我们都在等待某个人,等到累了,就随便牵起某人的手,默默地走进礼...
    在Linux下用Virtualbox虚拟机安装Windows XP
    大学里的挂科是对考前三天不用功的惩罚.这是教算法的赵PZ讲的,窃以为很有道理。可是接下来的十一天里我...
    壮哥!才发现你博客里这么多好东西,慢慢欣赏了,哈哈~~~~~~~~~~
    哥们现在用的什么?ghs不是又被封了吗
    提取字符串中的数字并分别保存
    十一天八考之路
    WPF使ListBox支持手势多选功能
    动手实现扩展属性为对象动态添加获取数据(续)
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/11320585.html
Copyright © 2020-2023  润新知