文本编译器--Vim

         Vim是从 vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,linux系统用户最喜欢的文本编辑器。我们初学者主要了解它的模式及快捷键即可。

一.vim的模式

      基本上vim可以分为三种模式:命令模式插入模式退出模式,其实vim有多种模式,如选择模式和替换模式等,我们只需要掌握这三种即可。

1.命令模式

      用vim 打开一个文件刚开始进入的就是命令模式,在这个模式下我们可以控制光标的移动,字符,字或者行的删除,移动复制某段区域,在该模式下可以进入插入模式也可以进入退出模式。

2.插入模式

      在插入模式下才可以插入文字,按Esc进入退出模式.

3.退出模式

       在退出模式下保存文件或者退出vim,也可以在退出模式下使用man查找函数等。

二、三种模式的转换关系图

VZ1ENV7]65(Z2`Q_GM)2LTD

命令模式  command (default) 移动光标,复制,剪切,粘贴,搜索,撤销,重做…… ,进入其他模式
                ZZ: 保存并退出
                ZQ: 不保存直接退出

插入模式  insert : 修改编辑文件内容
                *i:                          光标在哪,就在哪进入插入模式
                *I:                          光标移到所在行的行首,同时进入插入模式
                a:                          光标向后退一格,同时进入插入模式
                *A:                        光标移到所在行的行尾,同时进入插入模式
                *o:                        光标所在处向下创建一个新行,同时进入插入模式,光标在新行行首
                *O:                        光标所在处向上创建一个新行,同时进入插入模式,光标在新行行首

                回到command : Esc
退出模式  exit: 退出,保存,替换
                :                             进入退出模式
                *q                          退出
                *q!                         强制退出不保存
                *w                          保存
                *w!                         强制保存(仅限root及文件的owner)
                *wq或x                  保存并退出
                *wq!或x!                强制保存并退出 (仅限root及文件的owner)

回到command: EscEsc 或ENTER(左下方的:不会立即消失)
                r /path/filename                         在光标所在行向下粘贴指定路径的文件的内容
                w /path/newfilename                将当前文件另存为到指定路径的新文件中。
                 r! command                                在光标所在行向下粘贴命令的输出结果
                 .! command                                将光标所在行替换并粘贴命令的输出结果
                :# 光标移到第#行    

选择模式
            v  进入字符选择模式               
                d c y
            V  进入整行选择模式
                d c y

三.vim在命令模式下的各种快捷键

(1).移动光标

        1.vim 可以使用小写英文字母 h j k l 分别控制光标左 下 上 右移动,也可以使用箭头
        2.Ctrl+b                                             屏幕往后移动一页
        3.Ctrl+f                                              屏幕往前移动一页
        4.Ctrl+u                                             屏幕往后移动半页
        5.Ctrl+d                                             屏幕往前移动半页
        6.Shift+g == G                                  移动到文章的最后
        7.Shift+4 == $                                  移动到光标所在行的行尾
        8.Shift+6 == ^                                  移动到光标所在行的行首
        9.w                                                    光标跳到下个字的开头
       10.e                                                    光标跳到下个字的字尾
       11.b                                                    光标回到上个字的开头
       12.#l                                                   例如:5l ,56l 光标移动到该行的第'#'个位置
       13.gg                                                  进入到文本的开始
(2).删除文字

       1.x                                                      每按一次删除光标所在位置的一个字符
       2.#x :                                              6x 删除光标所在位置的"后面"(包含自己在内)6个字符
       3.Shift+x == X                                  每按一次,删除光标所在位置的前一个字符
       4.Shift+#x == #X                              20X 删除光标所在位置的前面20个字符
       5.dd                                                   删除光标所在行
       6.#dd                                               6dd 从光标所在行开始删除6行

(3).复制

       1.yw                                                 将光标所在之处到字尾的字符复制到缓冲区中
       2.#yw   6yw                                     复制6个字符到缓冲区
       3.yy                                                   复制光标所在行到缓冲区
       4.#yy     6yy                                     拷贝从光标所在的该行"往下数"6行文字
       5.p                                                    将缓冲区内的字符贴到光标所在位置
        注意:所有与y有关的复制命令都必须与p配合才能完成复制粘贴功能

(4).替换

        1.r                                                     替换光标所在处的字符
        2.R                                                    替换光标所到之处的字符,知道按下Esc键为止

(5).撤销上一次的操作

           u 回到上一个操作,按动多次'u'可以执行多次回复

(6).更改

           1.cw                                               更改光标所在处的字到字尾处
           2.c#w  c3w                                   表示更改三个字

(7).跳至指定行

           1.Ctrl+g                                         列出光标所在行的行号

           2.#G  15G                                     表示移动光标到文章的第15行行首

四、 以二进制方式打开文件
           vim –b binaryfile
           扩展命令模式下,利用xxd命令转换为可读的十六进制
           :%!xxd
            编辑二进制文件
            扩展命令模式下,利用xxd命令转换回二进制
            :%!xxd–r
            保存退出

           可视化显示颜色
             ^[[1;31mhello^[[0m    ^[  ctrl+v ;esc

五、地址定界(详细内容可以看sed)
            :start_pos,end_pos(开始位置,起始位置)
             # 具体第#行,例如2表示第2行
             #,# 从左侧#表示起始行,到右侧#表示结尾行
             #,+# 从左侧#表示的起始行,加上右侧#表示的行数
             :2,+3 表示2到5行
              . 当前行
              .,$-1 当前行到倒数第二行
              % 全文, 相当于1,$
              /pat1/,/pat2/
             从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
                 #,/pat/
                 /pat/,$

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

       查找并替换
                 :2s/bin/hello/gic    
                     g                                         表示将所匹配行的全行的所有的bin换成hello
                     i                                          表示忽略大小写,无论大写的Bin还是小写的bin都替换为hello
                     c                                         替换每个匹配字符串时,询问
             
        如果要替换的关键字当中包含/,则将替换所用的间隔符换成@或#,如下
       

  :%s@bin/bash@sbin/nologin@gi

 练习:

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

:%s/^[[:space:]]\+//gi 

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

:%s/\(^[[:space:]]\+.*$\)/#\1/gi

六、其他扩展知识
        1.undo
                 u                                              一步步撤消
                 U                                            将当前行一次性还原到最初打开状态,注意不能换行
                 :e!                                          一次性将整个文件还原
        2. redo
                 ctrl+r                                      重做

       3.vim FILE1 FILE2 FILE3 ...   多文件模式
             :next                                          下一个
             :prev                                           前一个
             :first                                            第一个
             :last                                            最后一个
             :wall                                           保存所有
             :qall                                            退出所有
             :wqall

       4.多文件分割
             vim -o|-O FILE1 FILE2 ...
             -o: 水平分割
             -O: 垂直分割
             在窗口间切换:Ctrl+w, Arrow
       5.  单文件窗口分割:
             Ctrl+w,s: split,                         水平分割
             Ctrl+w,v: vertical,                   垂直分割
             ctrl+w,q:                               取消相邻窗口
             ctrl+w,o:                                  取消全部窗口
             :wqall退出            

      6.配置文件:永久有效
             全局:/etc/vimrc
             个人:~/.vimrc
          
       7.扩展模式:当前vim进程有效
       (1) 行号
             显示:set number, 简写为set nu
             取消显示:set nonumber, 简写为set nonu
       (2) 忽略字符的大小写
             启用:set ic
             不忽略:set noic

      8. 故障恢复
             未保存修改,vim进程直接意外中断,可利用.文件名.swap来恢复
             vim -r 文件名  enter
             还原结束后,请自行删除.swap文件

猜你喜欢

转载自www.cnblogs.com/f-h-j-11-7/p/9383419.html