vim基本用法            

    模式化编辑器

        模式:

            编辑模式: 命令模式

                键盘操作常被理解为编辑命令

            输入模式

            末行模式: vim内置的命令接口,执行vim命令

        打开文件

            vim [option]... [file]...

        模式转换:

            编辑模式 --> 输入模式

                i: 在光标所在处的前方转换为输入模式

                a: 在光标所在处的后方转换为输入模式

                o: 在光标所在行的下方新建一个空行并转换为输入模式

                I: 行首

                A: 行首

                O: 光标所在行的上方新建一个空白行

            输入模式 --> 编辑模式

                Esc

            编辑模式 --> 末行模式

                :

            末行模式 --> 编辑模式

                ESC

        退出文件:

            :q! 不保存退出

            :wq 保存退出

            :x  保存退出

            ZZ  不保存退出

        编辑文本:

            光标移动:

                #{hjkl}: 跳#个字符

            单词间移动:

                w: 下一个单词词首

                e: 当期单词或下一个单词词尾

                b: 当前单词或前一个单词词首

            行内移动

                ^: 行首第一个非空白字符

                0: 绝对行首

                $: 绝对行尾

            行间移动

                #G: 直接跳至第#行

                G:  最后一行

        编辑命令:

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

            d:  删除命令

                结合光标跳转字符使用,删除光标跳转范围内的字符

            dd: 删除光标所在行

            D:  d$,删除光标以后的字符

            注意: 最后一次删除的内容会被保存至缓存区

            p: paste,粘贴

                行级别:

                    p: 粘贴于当前行上方

                    P: 粘贴于当前行下方

                小于行级别

                    p: 粘贴于当前光标所在行的后方

                    P: 粘贴于当前光标所在行的前方

            y: yank,复制

                结合光标跳转字符使用,复制光标跳转范围内的字符

                Y: yy

            c: change, 修改

                结合光标跳转字符使用,修改跳转范围内的字符

                先删除,再转换为输入模式

                cc,C: 删除光标所在处的整行而后转换为输入

            撤销操作:

                u: undo,撤销

                #u: 撤销最近的#次操作(50)

            撤销此前的撤销: ctrl+r

            重复前一条命令: .

        末行模式:

            行间跳转: 

                #: 指定行数

                $: 最后一行

            内容定界

                startpos,endpos

                    #: 第#行

                    .: 当前行

                    $: 最后一行

                    %: 全文,相当于1,$

                c,d,y等命令可以直接附加在地址范围后使用

                w /path/to/somefile: 将选定范围内的内容保存至某文件中

                r /path/from/sonmefile: 将指定的文件中的内容读取到指定位置

                s/查找模式/要替换成的内容/gi

                    %s/echo/i/gi

                    查找模式:可以使用正则表达式

                    要替换成的内容: 不能使用模式,仅能使用引用

                    g: global,全行替换

                    i: 不区分大小写

                    引用匹配模式匹配到的所有内容可以用&

        练习: 

            复制/etc/rc.d/init.d/functions至/tmp目录

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

                :%s#/etc/sysconfig/init#/var/log#gi

        练习:

            1. 复制/etc/grub.conf至tmp目录,删除/tmp/grub.conf文件中的行首的空白字符

                :%s#^[[:space:]]\{1,\}##gi

            2. 复制/etc/rc.d/rc.sysinit至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#号

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

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

            3. 删除/tmp/rc.sysinit文件中以#号开头,且后面跟了至少一个空白字符的行的行首的#号和空白字符

                :%s@^#[[:space:]]\{1,\}@@

            4. 为/tmp/grub.conf文件的前三行的行首家#号

                :1,3s@^@#@

            5. 将/etc/yum.repos.d/CentOS-Media.repo文件中的enable=0和gpgcheck=0两行最后的0改为1

                %s@\(enable\|gpgcheck\)=0@\1=1@

        vim可视化模式

            v: 光标走过的字符

            V: 光标走过的行

        文本查找:

            用法同less命令

                /pattern

                ?pattern

        翻屏:

            ctrl+f: 向文件尾部翻一屏

            ctrl+b: 向文件首部翻一屏

            ctrl+d: 向文件尾部翻半屏

            ctrl+u: 向文件首部翻半屏

            j: 向下走一行

            k:想上走一行

        多文件模式:

            :next  下一个文件

            :previous  前一个文件

            :last  最后一个文件

            :first  第一个文件

            :wqall  退出保存所有

        多窗口模式:

            多文件

                -o: 水平分割两个窗口

                -O: 垂直分割两个窗口

                ctrl+w,arrow

            单文件:

                ctrl+w,s: 水平分割

                ctrl+w,v: 垂直分割

        窗口属性设定:

            :set nu    显示行号

            :set nonu    取消显示行号

            :set ai    自动缩进

            :set noai    取消自动缩进

            :set ic    忽略字符大小写

            :set sm    显示自动匹配括号

            :syntax off    语法高亮关闭

            配置文件:

                全局: /etc/vimrc

                用户: ~/.vimrc