Linux学习文档(10):vim编辑器

简介:     
    vim的前身vi:文本编辑器
    文本:ASCII,Unicode...
    文本编辑种类:
        行编辑器:sed
        全屏编辑器:nano

使用:
    vim: 模式化的编辑器

        基本模式:
            (1) 命令模式(打开vim的默认模式)
            (2) 输入模式
            (3) 末行模式(内置命令行接口)

        打开文件:
            # vim [OPTION]... FILE...
            Note:目标文件是否存在都可以打开,不存在时可以创建,但其目录名必须存在
                OPTION:
                    +#:打开文件后,直接让光标处于第#行的行首
                    +/模式:打开文件后,直接让光标处于第一哥被模式匹配到的行的行首

        模式转换:
            命令模式 --> 插入模式
                i:在光标所在处的前面
                a:在光标所在处的后面
                o:在当前光标所在行的下方打开一个新行
                I:在当前光标所在行的行首输入
                A:在当前光标所在行的行尾输入
                O:在当前光标所在行的上方打开一个新行


            输入模式 --> 命令模式(ESC键)
            命令模式 --> 末行模式(:)
            末行模式 --> 命令模式(ESC键)

                关闭文件:
                    :q 退出(末行模式关闭)
                    :q! 强制退出,丢弃做出的修改
                    :wq 保存退出
                    :wq! 强制保存退出
                    :x 保存退出
                    :w "文件路径" 将当前所有内容保存至指定的文件中

                    ZZ:命令模式下使用,保存退出

            光标跳转:
                字符间跳转:
                    h:左
                    j:下
                    k:上
                    l:右
                #COMMAND:跳转由#指定的个数的字符
                    例:#3l:像右侧跳三个字符
                       #3k:像上放跳三行

                单词间跳转:
                    w:跳到下一个单词的词首
                    b:跳到当前或上一个词的词首
                    e:当前或下一个单词的词尾
                #COMMAND:由#指定一次跳转的单词数

            行首行尾跳转:
                ^:跳转至行首,第一个非空白字符
                0:跳转至行首,忽略是否有空白字符
                $:跳转至绝对行尾,忽略是否由空白字符

            行间移动:
                #G:跳转至由#指定行
                G:跳转至最后一行
                1G,gg:回到文件首部

            句间移动(了解即可):
                ):跳转至下一个句子
                (:跳转至上一个句子

vim的编辑命令:
    字符编辑:
        x:删除光标处的单个字符
        #x:删除光标所在处起始的#字符
        xp:交换光标所在处的字符及其后面字符的位置

    替换命令(r):
        r:替换光标所在处的字符

    删除命令:
        d:删除命令,可结合光标跳转字符,实现范围删除
            d$:光标到行尾的内容都删除
            d0:光标到行首的内容都删除
            dj:光标到下行的内容都删除
            dk:光标到上行的内容都删除
            ...
        dd:删除一整行
        #dd:光标所在处像下一共删除#行
        D:删除一整行,会留有空白行
        #COMMAND:由#指定删除的单词数字

    粘贴命令(p):
        p:缓冲区中存储的如果为整行内容,则粘贴至当前光标所在行的下方,如果为非整行,则粘贴至当前光标所在出的后面
        P:缓冲区中存储的如果为整行内容,则粘贴至当前光标所在行的上方,如果为非整行,则粘贴至当前光标所在出的前面

    复制命令(y):
        y:复制,工作行为相似于d命令:
            y$:复制到行尾
            y0:复制到行首
            ...
        yy:复制一整行
        #yy:复制多行,算上当前行加上#就是要复制的行的行数

    改变命令(c):
        c:修改
            命令模式 --> 输入模式
        ce:删除一个单词进行修改
        c$:删除至行尾进行修改
        c^:删除至行首进行修改
        cc:直接删除并输入内容
        #cc:同时删除多少行并输入内容

其他编辑操作:

可视化模式:
    v:按字符选定光标跳转时滑过的
    V:按行选定
    Note:结合编辑命令使用,y键复制选中的行或字符,d键删除选中的行或字符....

撤销命令(u)
    u:默认会把缓冲区中的执行还原,默认缓冲区能存50条
    #u:指定撤销次数,默认撤销一次
    Ctrl+r:撤销此前的撤销

重复前一个编辑操作:
    . : 比如dd了一行,然后再按.号就相当于又执行了dd

翻屏操作:
    Ctrl+f :向文件尾部翻一屏
    Ctrl+b :向文件首部翻一屏
    Ctrl+d :向文件尾部翻半屏
    Ctrl+u :向文件首部翻半屏

vim中的末行模式:

内建的命令行接口

    (1) 地址定界
        :start_pos,end_pos
            #:具体第#行,例如2就表示第2行
            #,#:从#行到第#行,例如2,100就是2到100行
            #,+#:从左侧#表示行起始,加上右侧#表示的个行
            .:当前行
            $:最后一行
            %:全文=1,$

            /模式1/,/模式2/(两个模式之间的所有行):
                从第一次被模式1匹配到的行开始,一直到第一次被模式2匹配到的行结束
                #,/模式/:指定的行开始到第一次匹配到模式的行结束之间的行
                /模式/,$:从第一次匹配到模式的行开始一直到尾部之间的所有行

            使用方式:
                后跟一个编辑命令
                    d
                        例:1,20d                           #删除1到20的所有行
                    y
                        例:
                            :1,20y                         #复制1到20的所有行
                    w "文件绝对路径"
                        例:
                            :1,20w /tmp/vim.txt            #将1到20的所有行保存至后方指定的文件中
                    r "已存在的文件绝对路径"
                        例:
                            :r /etc/fstab                  #将后方指定的文件内容读取到当前文件光标所在位置
                            :100 /etc/issue                #读取/etc/issue文件到当前文件的第100行处

    (2) 查找
        /模式(从当前光标所在处像文件尾部查找)
            n:从光标处像下面的行,到文件尾部后,会从第一行再次遍历查找
            N:从光标处像上面的行方向查找,到文件首部后,会从最后一行遍历查找
                例:
                    /\<r..t\>                                  #查找当前文件中以r开头中间跟两个任意字符以t结尾的字符,"n"像下查找,"N"像上查找

        ?模式(从当前光标所在处像文件首部查找)

    (3) 查找并替换
        s:在末行模式下完成查找替换操作
            s/要查找的内容/要替换成的内容/修饰符
                要查找的内容可使用模式
                替换为的内容不能使用模式,但可以使用\1,\2...等后向引用符号,还可以使用&引用前面查找到的整个内容
                修饰符:
                    i:查找时忽略大小写
                    g:全局替换,不带g,默认情况下,每一行只替换第一次出现
                        例:
                            :.,$s/r\(..\)t\R\1T/

            查找替换中的分隔符/可替换为其它字符,例如:
                s@@@
                s###
练习:
    1、复制/etc/grub2.cfg至/tmp目录,用查找替换命令删除/tmp/grub2.cfg文件中的行首的空白字符
        解: :%s#\(^[[:space:]]\+\)\(.*\)#\2#g 或者 :%s/^[[:space:]]//         #第一种方法复杂,自己想的,第二种是给的官方答案

    2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号
        解:  :%s@\(^[[:space:]]\+.*\)@#&@g 或者 :%s/^[[:space:]]/#&           #第一种方法自己想的,第二种给的官方答案

vim中的多文件模式:

vim FILE1 FILE2 FILE3 ....
    :next:跳到当前文件的下一个文件
    :prev:跳到当前文件的上一个文件
    :last:跳到最后一个文件
    :first:跳到第一个文件
    :wall :保存所有文件
    :qall :退出所有
        例:
            vim /tmp/{functions,grub2.cfg,test.txt}
            默认打开第一个文件是functions,(:next)可以到grub2.cfg文件再次(:next)可以转到test.txt文件,返回上一个文件是(:prev),三个文件之间可以互相复制粘贴



窗口分隔模式:
        vim -o|-O FILE1 FILE2...
            -o:水平分割(上下两个文件),在文件中使用Ctrl+w,s再次水平分割
            -O:垂直分割(左右两个文件),在文件中使用Ctrl+w,v再次垂直分割

            在窗口间切换:Ctrl+w,Arrow

    单文件窗口分隔:
        Ctrl+w,s:水平分割
        Ctrl+w,v:垂直分割

    定制vim的工作特性:
        配置文件(永久有效):
            全局:/etc/vimrc
            个人:~/.vimrc

        末行(当前vim有效):

            (1) 行号
                    显示:set number(set nu)
                    取消显示:set nonumber(set nonu)
            (2) 括号匹配
                    匹配:set showmatch(set sm)
                    取消匹配:set noshowmatch(set nosm)
            (3) 自动缩进
                    启用:set autoindent(set ai)
                    禁用:set noautoindent(set noai)
            (4) 高亮搜索
                    启用:set hlsearch
                    禁用:set nohlsearch
            (5) 语法高亮
                    启用:syntax on
                    禁用:syntax off
            (6) 忽略字符大小写
                    启用:set ic
                    不忽略:set noic
获取帮助:
    :help
    :help subject

练习:
1、复制/etc/rc.d/init.d/functions文件至/tmp目录,替换/tmp/functions文件中的/etc/sysconfig/下的路径为/var/log
解: :%s#/etc/sysconfig#/var/log#g

2、删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号
    解: :%s@^#[[:space:]]\+@@g
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值