∮vim

  

   vim是一个类似于vi的文本编辑器,不过在vi的基础上增加了很多功能,在早起vimEmacs编辑器打的很火热,在1999年被linuxwork文本编辑分类的优胜者,而vim屈居第二,但2000vim赢得了salashdot beanie的最佳开放源代码文本编辑大奖,此时的Eamcs到第二位,vimEmacs都是非常优秀的文本编辑器。

  viVisual Interface,是一种文本编辑器,所谓文本数据是基于字符编码的文件,。

文本编辑器分类:

    行编辑器:所行编辑器是指一行一行的来编辑处理的工具,如之前讲过的sed

    全屏编辑器:编辑空间占整个屏幕,如nanovi

  vimvi improvedvi的增强版,vim是模式化的编辑器

  vim的工作模式又三种,编辑模式,输入模式,命令扩展模式

 

vim的使用

   打开文件

   vim  [option]…..filename….

   +n:打开文件后,直接将光标定位只指定的行的行首

   +/parttern:打开文件后,直接将光标定位都第一个被pattern匹配的行首

   vim +filename,直接打开文件,光标在最后一行

   vim –b filename filename二进制方式打开文件

 vim –d file1 file2:比较多个文件

 vim –m filename :只读打开文件,这是不能写入数据。

 

 在使用文件存在时,如果文件不存在,文件被打开并的内容

 如果文件不存在,就相当于新建了一个文件。

 

模式切换

  esc键:从输入模式转换到编辑模式

从编辑模式转换到输入模式,可以使用一下命令

   iinsert,在光标所在处输入

   I:在当前光标所在行的行首输入

   aappend,在光标所在处后面输入

   A:在当前光标所在行的行尾输入

   o:在当前光标所在行的下方打开一个新的行

   O:在当前光标所在行的上方打开一个新的行

命令模式——>扩展命令模式

  

扩展命令模式——>命令模式

   esc

锁定和解锁:ctrl+sctrl+q

 

 关闭文件

扩展命令模式下推出文本

   :q 退出文件

   :q! 强制保存退出,丢弃做出的修改

   :wq  保存退出

   :x 保存退出

 

命令模式下退出文本

   ZZ 保存退出

   ZQ 不保存退出

 

扩展模式

    按“:”进入Ex模式

    创建一个命令提示符,处于底部的屏幕左侧

    命令

    w写入磁盘文件

    wq保存退出

    x 写入并推出

    q 退出

    q!不存盘退出,即使修改的内容,也不会保存

     r filename 读文件内容到当前文件中

  :r /etc/issue 将文件内容插入到光标所在的位置


     !command 在命令扩展模式下指定命令

 :!ls /etc/issue

    r!command 将某个命令执行的记过读入到当前文件中

  r!cat /etc/issue

1470742019703278.jpg

1470742019312710.jpg


             

命令模式光标跳转

    字符间跳转

    h:左

     l:右

    j:下

    k:上

记忆小技巧h在哪一排的最左边所以是左,l在最右边就是右,j可以理解成japan,日本在韩国的下边,j就是下,而韩国的首字母是k,韩国在日本上方,k就是上

 

   单词间跳转

   w:下一个单词的词首

   e:当前或下一个单词的词尾,end最后

   b:当前或前一个单词的词首,before        

   #command:有#指定一次跳转的单词数,比如我想跳转3个词,就是3w

 

   当前页跳转

   H:当前页的首部,可以理解成head

   M:页中间,middle

   L:当前页的底部,lower

 

   行首行尾跳转

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

   0:跳转至行首,绝对行首

   $:跳转至行尾

        

  行间移动:

  #G:扩展模式下直接指定跳转的行数如 10跳至第十行

  G:跳转至文件内容的最后一行

  1Ggg:跳转至文件的第一行

        

  句间移动

   “(”:上一句

   “)”:下一句

        

   段落间移动:

   {”:上一段

   }”:下一段

 

命令行模式翻屏操作

    翻屏

    ctrl+f:向下翻一屏

    ctrl+b:向上翻一屏

    ctrl+d:向下翻半屏

    ctrl+u:向上翻半屏

 

命令模式操作

   字符编辑:

    x:删除光标处的字符

    #x:删除光标处的#个字符

    xp:交换光标所在处的字符及其后面字符的位置,也就是后面的一个字符,换到前面的一个字符的位置

    ~:转换大小写,原本是大写转换成小写,原本是小写,转换成大写

        

   命令替换(replace

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

    R:切换成REPLACE模式

        

   删除命令

   d:删除命令,可结合光标跳转字符(wbe),实现范围删除

   d$:删除到行尾

   d^:删除到非空行首

   d0:删除到行首

   dw:删除到下一个单词的词首   

   de:删除到下一个单词的词尾

   db:删除至上一个词的词尾

   #command3dw

   dd:删除光标所在的行 3dd

   D:从光标处一直删除到行尾,留空行等同于d$

        

   复制命令(yank

   y:复制,跟d类似

   y$:从当前位置复制到行尾

   y0 从当前行复制到行首

   y^:从当前位置复制到非空白行首

   yw:从当前位置复制一个单词词首

   ye:从当前位置复制一个单词词尾

   yb:从当前位置复制单词的词尾

   yy:复制行 3yy

   y:复制整行

        

   粘贴命令(paste

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

   P(大写):缓冲区如果为整行,粘贴当前光标所在行的上面,否则,粘贴至光标所在处的前面

        

   改变命令(change

   c:修改后切换成插入模式

   命令模式——>插入模式

   c$:从光标的当前位置到行尾的内容删除,用户可新添加内容

   c^:从光标的当前位置到行非空白字符行首的内容删除,用户可新添加内容

   c0:从光标的当前位置到行绝对行首的内容删除,用户可新添加内容

   cb:从光标的当前位置到上个单词的词首删除,用户可新添加内容

   ce:从光标处到下个词的词尾删除,用户添加新内容

   cw:从光标的当前位置到下个词的词首删除,用户添加新内容

   #command

   cc:删除当前行并输入新内容 3cc

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

 

命令模式

   10"xiaoesc粘贴‘xiao1o

   y复制,d删除,gU变大写,gu变小写(移动光标才会改变)

        

扩展模式:地址定界

    :start,end

#: 具体第#行,例如2表示第2行;

#,#: 从左侧#表示行起始,到右侧#表示行结尾

#,+#: 从左侧#表示的行起始,加上右侧#表示的行数

2,+3 表示25

     “.” :当前行

     $:最后一行

     : .,$-1当前行到倒数第二行

     %:全文,相当于1,$

     /part1/./part2/

     从第一次被part1模式匹配到的行开始,到第一次被part2匹配到的行结束

  :/root/,/abc/

     #/part/ #行到被模式第一次被part匹配到的行结束

      /part/,$ 从第一次被模式匹配到的行到最后一行

     使用方式:后跟一个编辑命令

     d:删除

     y:复制

    w /path/to/file 将范围匹配到的行写到指定的文件中

    r file:在指定位置插入指定文件的内容

        

    查找

    /pattern:从当前光标所在处向文件尾部查找

    pattern:从当前光标所在处向文件首部查找

    n:向下翻页

    N:向上翻页

 

    查找替换

    s:在扩展命令模式下完成查找替换操作

    格式: s/要查找的内容/替换的内容/修饰符

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

    替换的内容:不能使用模式,但可以使用\1,\2….等后向印象引用符号;还可以使用“&”引用前面查找时找到的整个内容

   修饰符:

    i:忽略大小写

    g:全局替换;默认情况下,每一行只替换第一次出现

    gc:全局替换,每次替换前询问

 

    查找替换中的分隔符/可替换为其他字符,例如

    s@/root@/var@g

    s#/boot#/#i

 

    撤销更改

    u撤销最近的更改

    #u:撤销之前多次更改

    U:撤销光标落在这行后所有此行的更改

    ctrl –r 重做最后的撤销更改

    "."重复前一个操作

    "n."重复前一个操作n

        

vim寄存器

  26个命名寄存器和1个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享。用ab,…,z表示,寄存器表示,放在数字和命令之间

如:3"tyy 表示复制3行到t寄存器中"tp 表示将t寄存器内容粘贴未指定,将使用无命名寄存器有10个数字寄存器,用019表示,0存放最近复制内容,1存放最近删除内容。当新的文本变更和删除时,1转存到22转存到3,以此类推。数字寄存器不能在不同会话间共享。

 

 

 

编辑二进制文件

   以二进制方式打开文件

   vim –b  /bin/bash

扩展命令模式下,利用xxd命令转换为刻度的十六进制

   %!xxd

编辑二进制文件

扩展命令模式下,利用xxd命令转换回二进制

保存退出

3.jpg

 

 

可视化模式

    允许选择地文本

    v:面向字符

    V:面向行

    ctr –v 面向块

    可视化键可用于移动键结合使用

    w, ), {,方向键等

    突出显示的文字可以被删除,复制,变更,过滤,搜索/替换等

        

 5.jpg

多文件模式

    vim file1 file2 file3 file4

    next 下一个

    prev 上一个

    first 第一个

    last 最后一个

    wall保存所有

    qall 退出所有

    wqall 保存退出所有

   

1470744555238415.jpg

1470744556961827.jpg

      

使用多个窗口

   vim –o|-O file1 file2

   -o:水平分割

   -O:垂直分割

   在窗口间切换ctrl+w 左右键

   单个文件窗口分割

   ctrl+w,ssplit,水平分割

   ctrl+w,vvertical,垂直分割

   ctrl+wq取消相邻窗口

   ctrl+w,o:取消全部窗口

   wqall退出

 8.jpg

 9.jpg

vim配置文件

   全局:/etc/vimrc

   个人:~/.vimrc

        

   扩展模式:当前vim进程有效

   显示行号

   set number简写为set nu

   取消行号 set nonu

        

1470744693933806.jpg

1470744692128301.jpg

   括号成对匹配        

    set showmatch简写set sm

    取消set nosm

 

   自动缩进

   启用set ai

   取消set noai

       13.jpg 

     高亮搜索

     启用: set hlsearch

     取消: set nohlsearch

        14.jpg

    语法高亮

    启用:syntax on

    取消:syntax off

      

    忽略字符的大小写

    启用:set ic

    取消:set noic

         

    文件格式

    启用 fileformat=unix     

    不忽略:fileformat=dos

        

    设置文本宽度

     set textwidth=60

     set wrapmargin=10

 

     help option-list 获取帮助列表

     set or setall 显示set相关的命令

        

vim内置帮助

   help

   help topic    

   vimtutor(执行命令进入帮助文档)

 

练习

复制/etc/profile/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符

    cp /etc/profile  /tmp    

    vim profile

   :s@^[[:space:]]@@g'

 

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

  cp /etc/rc.d/init.d/functions /tmp

  vim funtions

  :s@^[[space:]]@#&@g'