vim编辑器使用详解_vim

  • Vim简介

    Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是纯粹的自由软件。

    Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999 年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, Vim和Emacs同样都是非常优秀的文本编辑器。

   全屏幕的编辑器:VIM,又称,visual interface,是一款文本编辑器,vi, vi iMproved


  • Vim模式:

    编辑模式:命令模式

    输入模式:

    末行模式:


  • 使用Vim:

    vim [options] [file ..]

    # vim

    # vim /PATH/TO/SOMEFILE    

      +#:#为行号;

      +:快速定位至最后一行

      +/PATTERN:快速匹配到文档


  • 模式间转换:

    编辑模式 --> 输入模式:

      i: 当前光标输入,

      a:当前光标的下一位输入,

      o:新插入一行输入,

      I: 行首输入,

      A:行尾输入,

      O:上方新建行输入,

    输入模式 --> 编辑模式

      ESC

    编辑模式 --> 末行模式

      :

    末行模式 --> 编辑模式

      ESC


  • 关闭vim:

    末行模式:

      :q  退出;

      :q!  强制退出;

      :wq  保存并退出;

      :x  保存并退出;

     

    编辑模式:

      ZZ:保存退出;


  • 光标跳转:

注:以下操作需在编辑模式完成;

    字符间跳转:

      k:

 h:        l: (k,上)(j,下)(h,左)(l,右)

      j:

      #COMMAND: #号代表数字,5k(表示5个字符)


    单词间跳转:

      w:下一个单词的词首;

      e:当前或后一个单词的词尾;

      b:当前或前一单词的词首;

      #COMMAND: 


    行内跳转:

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

      0:跳转至绝对行首;

      $:跳转至绝对行尾;


    行间移动:

      #G: 5G (跳转到第五行)

      1G,gg

      G:文本的文尾(最后一行)

      gg:文本的文首(第一行)


    句间移动:

      )

      (


    段落间移动:

      }

      {


  • 编辑命令和操作:

注:以下操作需在编辑模式完成;

    字符编辑:

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

      #x: 5x (删除光标所在处后5个字符)

      xp: 删除并复制

      r: 替换光标所在处的字符,R;


    删除命令:

      d: 删除命令

      d^:删除光标至行首

      d$:删除光标至行尾

      d0:删除光标至行首的所有字符

      dw, de, db

      dd:删除当前光标的所在行(整行)

      #COMMAND:#代表数字

注:删除的内容会被vim编辑器保存至缓冲区当中;


    粘贴命令:p (paste, put)

      如果此复制或删除的内容不是一个完整行

      p:粘贴至当前光标所在处后面;

      P:粘贴至当前光标所在处前面;

      如果复制的内容是完整行(可不止一行)

      p: 粘贴至当前光标所在行下方;

      P:粘贴至当前光标所在行上方;


    复制命令:y, yank

      y:复制命令

      y$, y^, y0

      ye, yw, yb

      yy:复制行

      #COMMAND:5yy(复制5行)


    修改命令:c, change

      c$, c^, c0

      cb, ce, cw 

      cc: 删除当前行,并移至行首,开启输入模式

      #COMMAND:5cc(删除光标以下5行,并开启输入模式)


    撤销命令:

      u: undo;撤消此前编辑操作;

      #u:#代表撤销次数

      Ctrl+r:恢复此前的撤消操作(撤销撤销,还原撤销)

      .: 重复前一个编辑操作


  • 翻屏操作快捷键:

      Ctrl+f: 向后一屏;

      Ctrl+b:向前一屏;


      Ctrl+d: 向后半屏;

      Ctrl+u: 向前半屏;


  • 多文件模式:


    打开文件:vim [OPTIN]...[FILE]...

      :next  下一个文件

      :first  第一个文件

      :prev  上一个文件

      :last  前一个文件

      :wqall  全部保存并退出

      :q!all  全部强制退出


  • 多文件窗口分割:

    打开文件:vim -o|-O FILE1 FILE2 ...

      Ctrl+w:切换窗口,多文件编辑窗口切换


  • 单文件窗口分割:

    Ctrl+w, s: split, 水平分割

    Ctrl+w, v: vertical, 垂直分割

      

VIM内建教程:

[root@localhost ~]# vimtutor



VIM末行模式操作和命令:

注:如下如何操作均在末行模式完成

1、地址,定界

    :start_pos,end_pos

    #:第#行;

    #,#

    #,+#

    .: 当前行

    $: 最后一行

    %: 全文,相当于1,$


    /pat1/:第一次被此模式所匹配到的行;

    #,/pat1/

    /pat1/,/pat2/


    后可跟编辑命令:

    d, y

    w, r


2、查找

    /PATTERN:向尾部进行

    ?PATTERN:向首部进行

    n: 与命令同方向

    N:与命令反方向 


3、查找替换

    s: 在末行模式下,在地址定界的范围内完成查找替换操作;

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

      要查找的内容:可使用模式

      替换为的内容:不能使用模式,但可以使用后向引用符号,以引用前面模式中的分组括号所匹配到的内容;

      \1, \2, ...

      &:引用“要找的内容”匹配到的整个内容;

    修饰符:

      i: 忽略大小写

      g: 全局替换

      /:用于分隔符,所以,要查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式:\/分隔符可替换为其它字符:例如@,#等;

vim编辑器使用详解_vim_02


4、在vi中执行命令和导入文件

    在末行模式下:  

      导入文件:  r FILENAME

     执行命令:  !COMMAND

      导入执行命令的结果:   r!COMMAND



  • 定制vim的某些工作特性

    1、行号

显示:set nu

禁用:set nonu

    2、括号匹配

显示:set sm

禁用:set nosm

    3、自动缩进:

set ai

set noai

    4、高亮搜索

set hlsearch

set nohlsearch

     5、语法着色

syntax on

syntax off

     6、忽略字符大小写

set ic

set noic

     7、:help 获取帮助


  • 特性设定的永久生效方式:

    全局配置文件:/etc/vimrc

    用户个人的配置文件:~/.vimrc


练习

1、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;

   答:%s/^[[:space:]]//g

2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;

   答:%s/^[[:space:]][[:space:]]/#/g

3、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;

   答:%s/\/etc\/sysconfig\/init/\/var\/log/g

4、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;

   答::%s/^#[[:space:]]//g