上古神器vim

概述:

    在之前的篇章中,我们介绍了一些文本的处理工具,如grep、sed、cut、sort等,但是那些工具的侧重点都在于有了现成的文本之后,对现有的文本进行一定条件的加工处理后,满足我们进一步对数据的要求。但是目前为止,还没有接触一款专业用来编辑文本的工具,本篇就来介绍一下Linux系统上自带的专业用来文本编辑的上古神器–vim

    本篇将分为以下几个部分来为大家呈现vim的强大功能:

        1、vim简介及模式切换

        2、命令模式操作技巧介绍

        3、扩展命令模式(末行模式)操作技巧介绍

        4、其他模式简介

        5、vim运行环境定制

        

第一章    vim简介及模式切换

    vim是一款Linux系统上的文本编辑工具,类似于windows上的txt文本编辑器,vim是早期vi的升级版本,一般常用的有三种工作模式:命令模式、编辑模式和扩展命令模式(末行模式)。他们之间的转换关系:

    blob.png

    各模式之间的切换:

        命令–>编辑

            i:在光标所在字符处的前面插入

            I:在光标所在行的行首插入

            a:在光标所在字符处的后面插入

            A:在光标所在行的行尾插入

            o:在光标所在处的下一行,新建一行插入

            O:在光标所在处的上一行,新建一行插入

        编辑–>命令

            Esc键

        命令–>扩展命令

            :  执行vim某些内置命令

            /  执行向下搜索

            ? 执行向上搜索

        扩展命令–>命令

            Esc键

    vim命令格式:

        vim [OPTIONS] FILE1…

        OPTIONS:

            +#  打开文件后让光标处于文档的第#行

            +   打开文件后,光标处于最后一行

            +/PATTERN   打开文件后,光标处于第一次被模式匹配到的行

            -b   以二进制形式打开文件

            -m   以只读方式打开文件

            -o   水平分割打开多个文件

            -O   垂直分割打开多个文件

            -d  比较两个文件的区别

         示例:vim -d issue  issue2

        blob.png

第二章    命令模式快捷方式介绍

    保存内快捷键

        ZZ   保存退出

        ZQ   不保存退出

    字符间移动

        h   光标向左移动一个字符

        i   光标向右移动一个字符

        j   光标向下移动一个字符

        k   光标向上移动一个字符

        #h|i|j|k   光标向指定方向移动#个字符

    单词间移动

        w   光标移动到下一个单词的词首

        e   光标移动到下一个单词的词尾

        b   光标移动到当前或上一个单词的词首

        #w|e|b   光标向单词的指定位置移动#个单词

    屏幕范围内移动

        H   光标移动到本屏内容的第一行的第一个字符处

        M   光标移动到本屏内容的最中间的行的第一个字符处

        L   光标移动到本屏内容的最后一行的第一个字符处

    行内移动

        ^   光标移动到本行行首的第一个非空白字符处

        0   光标移动到本行行首,可以是空白字符

        $   光标移动到本行的行尾最后一个字符处,可以是空白字符

    行间移动

        G   光标移动到文本的最后一行

        #G   光标移动到文本的指定的第#行

        1G、gg   光标移动到文本的第一行

    句间、段间移动

        )   光标移动到下一句,第一个字符

        (   光标移动到上一句,第一个字符

        }   光标移动到下一段落,段落起始行第一个字符,有空白行分隔,即认为是段落

        {   光标移动到上一段落,段落起始行第一个字符

    翻屏操作

        Ctrl+f、PageDown   向文件尾部翻一屏,光标在屏幕第一行的第一个字符处

        Ctrl+b、PageUp   向文件首部翻一屏,光标在屏幕最后一行的第一个字符处

        Ctrl+d   向文件尾部翻半屏

        Ctrl+u   向文件首部翻半屏

    

    字符编辑

        x   删除光标所在处的字符,后续本行内容向前移

        #x   删除光标处开始往后的#个字符

        xp   交换光标所在处的字符及其后面字符的位置,x相当于删除了字符,p相当于粘贴了字符

        #xp   将光标所在处的#个字符放到放到删除后留存的第一个符的后面

        ~   转换光标所在处字符的大小写

    替换命令:

        r   替换光标所在处的字符为输入的字符

        R   切换为REPLACE模式完全替换

    删除命令:d,可结合光标跳转字符,实现范围删除,内容并未真正删除,而是保存在寄存器里面

        d$   删除光标所在处到本行行尾的内容

        d^   删除光标所在处到本行非空白字符行首的内容

        d0   删除光标所在处到本行行首的内容,行首可以是空白字符

        dw   向后删除光标所在处到下一个单词的词首的内容,#dw可删除#个单词

        de   向后删除光标所在处到下一个单词的词尾的内容,#de可删除#个单词

        db   向前删除光标所在处到上一个单词的词首的内容,#db可删除#个单词

        dd   删除光标所在处的一整行内容,#dd可删除光标所在处往后的#行内容

        D   删除光标所在处到行尾的内容,等同于d$

        #COMMAND 可结合光标跳转字符,实现删除范围内容,如d}、d)等

    复制命令:y 复制,行为类似于d命令,复制的内容存放在寄存器上

        y$   复制光标所在处到行尾的内容

        y^   复制光标所在处到行首非空白字符的内容

        y0   复制光标所在处到本行行首的内容,行首可以是空白字符

        yw   向后复制光标所在处到下一个单词的词首的内容,#yw可删除#个单词

        ye   向后复制光标所在处到下一个单词的词尾的内容,#ye可删除#个单词

        yb   向前复制光标所在处到上一个单词的词首的内容,#yb可删除#个单词

        yy   复制光标所在处的一整行内容,#yy可复制光标所在处往后的#行内容

        Y   复制整行

        #COMMAND 可结合光标跳转字符,实现复制范围内容,如y}、y)等

    粘贴命令:

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

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

    改变命令:c,修改后切换成编辑模式,运行后切换到编辑模式,进行编辑操作

        c$   改变当前光标所在处到本行行尾的内容 ,先删除,后切换到编辑模式

        c^   改变光标所在处到行首非空白字符的内容,先删除,后切换到编辑模式

        c0   改变光标所在处到本行行首的内容,行首可以是空白字符,先删除,后切换到编辑模式

        cw   向后改变光标所在处到下一个单词的词首的内容,#cw可改变#个单词,先删除,后切换到编辑模式

        ce   向后改变光标所在处到下一个单词的词尾的内容,#ce可改变#个单词,先删除,后切换到编辑模式

        cb   向前改变光标所在处到上一个单词的词首的内容,#cb可改变#个单词,先删除,后切换到编辑模式

        cc   改变光标所在处的一整行内容,#cc可改变光标所在处往后的#行内容,先删除,后切换到编辑模式

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

        #COMMAND 可结合光标跳转字符,实现复制范围内容,如c}、c)等

    撤销更改:

        u   撤销最近一次的更改

        #u   撤销之前#次的更改

        U   撤销本行的所有更改

        .   重复前一个操作

        #.   重复前一个操作#次

    其他特殊用法:

        50  i  STRING  Esc键  相当于粘贴50次STRING到i插入的字符处

        <START_POSOTION><COMMAND><END_POSITION>

            支持的COMMAND:

                y复制、d删除、gU变大写、gu变小写

            例如:0y$表示从行首复制到行尾

                  ggy10G表示从第一行复制到第10行

                  ye表示从当前位置拷贝到本单词的最后一个位置

                  gggUG 表示从第一行到最后一行全转换成大写

    

    

第三章    扩展命令模式(末行模式)快捷方式介绍

    保存退出内命令

        :w   存盘,保存

        :q   不保存退出

        :q!   强制不保存退出

        :wq   保存退出

        :wq!  强制保存退出

        😡   保存退出

    读取另存文件:

        :r /PATH/TO/FILE   读取指定文件内容到当前文件光标所在行的下方

        :w /PATH/TO/FILE   将当前文件的内容写入到另一个指定文件中,相当于另存

    

    运行外部命令:

        :!COMMAND   在不退出vim界面的情况下,执行shell命令,单独另起一个界面,显示命令结果,显示完,按任意键退回到vim界面

        :r!COMMAND   在不退出vim界面的情况下,执行shell命令,并将命令结果写入到当前光标所在处的下方

        示例:vim扩展命令行模式下运行:r!ls /root

        blob.png

    地址定界

        :#   光标移动到第#行

        :#1,#2   从第#1行到第#2行

        :#1,+#2   从第#1行开始,加上其之后的#2行的内容

            如:2,+3  表示第2到第5行的内容

        :.   表示当前行

        :$   表示最后一行

            如: .,$-1  表示从当前行到倒数第二行

        :%   表示全文,相当于1,$

        :/PATTREN1/,/PATTERN2/  从第一次被PATTERN1模式匹配到的行开始,一直到第一次被PATTERN2模式匹配到的行结束

            如:3,/^root/  表示从第3行开始到第一次匹配到行首为root的行结束,中间的所有的行

                /^root/,5   表示从第一次匹配到行首为root的行开始,到第5行,中间的所有的行

    编辑命令:配合地址定界命令使用,实现编辑动作

        d   表示删除

        y   表示复制

        w /PATH/TO/FILE   表示指定范围的行另存到指定文件中

        r /PATH/TO/FILE   表示在指定位置插入指定文件中的内容,如果地址定界是范围,则范围内的每行都加入指定文件的内容

    查找

        /PATTERN   表示从当前光标所在处向下查找指定的内容,支持正则表达式

        ?PATTERN   表示从当前光标所在处向上查找指定的内容,支持正则表达式

        查找到后,n显示与命令方向相同的下一个匹配到的内容,N显示与命令方向相反的下一个内容

    查找并替换:可与地址定界结合使用,实现范围内的查找替换

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

        要查找的内容支持正则表达式,替换为的内容支持后向引用,如\1,\2,&等

        修饰符:

            i  查找时忽略大小写

            g  全局替换,默认情况下,每行只替换第一次匹配到的内容

            gc   全局替换,每次替换时询问

        如:查找文件中以空白字符开头的行,在该行前面加上#号

        blob.png

第四章    其他模式简介

    1、可视化模式:类似利用鼠标操作的选定内容,然后利用文字的编辑命令如d、y、s///等进行处理

        命令模式–>可视化模式:

            v   切换到可视化模式,针对字符选取

            V   切换到可视化模式,针对行选取

            Ctrl+v   切换到可视化模式,针对块选取(类似选取某些行的位置相同的字段

        v的界面:

        blob.png


        V的界面

        blob.png

        Ctrl+v的界面

        blob.png

        选取了相关内容后,可利用d、y等编辑命令进行编辑操作

    2、多文件模式

        vim FILE1  FILE2…

        利用上述vim打开多个文件时,就是进入了多文件模式,屏幕只同时显示一个文件的内容

        可利用:

            :next   切换到下一个文件

            :prev   切换到上一个文件

            :first   切换到第一个文件

            :last   切换到最后一个文件

            :wall   保存所有文件

            :qall   退出所有

            :wqall   保存并退出所有

        vim -o FILE1 FILE2…水平分割,一个屏幕水平显示多个文件

        vim -O FILE1 FILE2…垂直分割,一个屏幕垂直显示多个文件

            在多个窗口间切换:Ctrl+w,然后按上下左右键进行窗口切换

        blob.png  

        blob.png    

        单文件窗口分割:

            Ctrl+w,s   水平分割

            Ctrl+w,v   垂直分割

            Ctrl+w,q   关闭相邻窗口

            Ctrl+w,o   关闭全部窗口

            :wqall   保存并退出所有

        blob.png

第五章    vim运行环境定制

    vim的诸多运行属性都可定义,定义方式包括支持直接在vim界面,扩展命令模式下运行:set OPTION  即可设置,该种设置方式只对当前vim的运行界面生效,要想对某个用户在运行的时候都启用该种特性,则需要将该设置命令写入到该用户家目录下的.vimrc文件中,该文件可能默认不存在,可手动创建该文件;如果想对所有用户都启用该特性,则可以将该属性定义在/etc/vimrc配置文件中

    常见的属性有:

        set all或set  在扩展命令模式时,运行该命令,可以查看所有可供定制的选项信息

        set number   可设置显示行号,可缩写为set nu

        set nonumber   可取消显示行号,可缩写为set nonu

        set tabstop=4   可设置tab键的缩进字符数量,默认是8个字符

        set showmatch   可设置括号成对匹配,可缩写为set sm

        set nosm   可设置取消括号成对匹配

        set ai   可设置自动缩进,也就是设置换行时,下一行跟上一行的起始位置自动一样,默认是在第一字符

        set noai   可禁用自动缩进

        set hlsearch   设置高亮显示搜索内容

        set nohlsearch   禁用高亮显示搜索内容

        syntax on   启用语法高亮显示

        syntax off  禁用语法高亮显示

        set ic   忽略字符大小写

        set noic  不忽略字符大小写

        fileformat=unix   将文件转码为unix文本格式

        fileformat=dos   将文件转码为dos文本格式,也就是windows文本格式

        set textwidth=65   设置vim文本的宽度为65个字符

        help option-list   显示帮助列表   

原创文章,作者:M20-1倪文超,如若转载,请注明出处:http://www.178linux.com/32432