VIM 编辑器的使用


回顾:egrep,扩展的正则表达式,变量,配置文件,算术运算符,条件测试,退出状态码

    BRE:
        字符匹配:., [], [^]
        次数匹配:?, +, *, {m,n}
        位置锚定:^, $, \<, \>, \b
        分组:(), \1, \2, ...
        或者:a|b

    变量:
        本地变量
        环境变量
        局部变量
        位置变量
        特殊变量

        命令:unset,export, declare -x, set, env, printenv, readonly

    配置文件:
        profile,bashrc

    算数运算:
        let, $[], $(()), expr

        +=, -=, *=, /=

        ++, --

    条件测试:
        test, [], [[]]

        三种:
            数值:-lt, -gt, -eq, -ne, -le, -ge
            字符串: ==, !=, <, >, =~, -z, -n
            文件:

    自定义退出码:
        exit [n]

            [ $# -lt 1 ] && echo "at least one argument." && exit 1


VIM 编辑器:

    简介:
        vi:Visual Interface,文本编辑器

        文本:ASCII,Unicode

        文本编辑器种类:
            行编辑器:sed
            全屏编辑器:nano,vi

        VIM - VI IMproved

    使用:
        vim:模式化的编辑

            基本模式:
                编辑模式,命令模式
                插入模式:
                末行模式:
                    内置的命令行接口

            打开文件:
                vim [OPTION]... FILE

                    +#:直接让光标处于第#行的行首
                    +/PATTERN:直接让光标处于第一个被PATTERN匹配到的行的行首

            模式转换:
                编辑模式 --> 输入模式

                    a:append,光标后插入
                    i:insert,当前光标插入
                    o:光标当前行下方打开一个新行
                    A:行首插入
                    I:行尾插入
                    O:光标当前行上方打开一个新行
                    c:
                    C:

                输入模式 --> 编辑模式
                    ESC

                编辑模式 --> 行末模式
                    :

                行末模式 --> 编辑模式
                    ESC


            关闭文件:
                :q
                :q!
                
                :wq 保存退出
                :x  保存退出
                ZZ  保存退出
                :w /PATH/TO/SOMEWHERE 文件另存为

            光标跳转:

                字符间跳转:
                    h, j, k, l

                    #COMMAND:跳转由#指定的个数的字符


                单词间跳转:
                    w:下一个单词的词首
                    e:当前或下一个单词的词尾
                    b:当前或前一个单词词首

                    #COMMAND: 由#指定一个跳转的单词数

                行首行尾跳转:
                    ^:跳至行首第一个非空白字符
                    0:跳至行首
                    $:跳至行尾

                行间移动:
                    #G:跳至第#行
                    G:最后一行
                    1G,gg:第一行

                句间移动:
                    )
                    (

                段落间移动:
                    }
                    {

    VIM的编辑命令:

        字符编辑:
            x:删除光标处的字符
            #x:删除光标处起始的#个字符

            xp:交换前后字符的位置
        字符替换(r,replace)
            r:替换光标处的字符

                例如:/vvv 替换为 mmmv
                    光标处于 / 处,输入 3rm 即可
                

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

                d$
                d^
                d0

                dw
                de
                db

                #COMMAND

                dd:删除当前行
                    #dd:多行删除

        粘贴命令(p,paste):
            p:缓冲区存在的如果为整行,则粘贴至当前光标所在行的下方;否则,则粘贴至当前所在行的后面
            P:缓冲区存在的如果为整行,则粘贴至当前光标所在行的上方;否则,则粘贴至当前所在行的前面

        复制命令(y,yank):
            y:复制,工作行为与 d 命令相似

                y$
                y^
                y0

                yw
                ye
                yb

                    #COMMAND

                yy:复制行
                    #yy:复制多行

        改变命令(c,change)

            c:修改,工作行为与 d 命令相似

                编辑模式 --> 输入模式

                c$
                c^
                c0

                cw
                ce
                cb
                    #COMMAND

                cc:删除并输入新内容
                    #cc:删除多行并输入新内容

        其他编辑操作

            可视化模式:
                v:按字符选定
                V:按行选定

                注意:经常结合编辑命令使用:
                    d,c,y

            撤销此前的编辑
                u(undo)
                    #u:撤销指定次数的操作

            撤销此前的撤销
                Ctrl + r

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

            Ctrl + d:向文件尾部翻半屏
            Ctrl + u:向文件首部翻半屏

        vim 自带的练习教程
            vimtutor

    VIM 中的末行模式
        内建的命令行接口

        (1) 地址定界
            :start_pos,end_pos
                #: 具体第#行,例如 2 表示第 2 行
                m,n:从 m 到 n 行
                m,+n:从 m 行开始,到 m+n 行
                .: 当前行
                $: 最后一行

                    .,$-1: 当前行到倒数第二行
                %: 全文,相当于1,$

                /pattern1/,/pattern2/
                    从第一次被 pattern1 模式匹配到的行开始,一直到第一次被 pattern2 模式匹配到的行结束

                    #,/pattern1/
                    /pattern/,$

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

                d
                y
                w /PATH/TO/SOMEWHERE:   将范围内的行另存只指定的文件中
                r /PATH/FROM/SOMEWHERE  将指定位置的内容读取到当前文件中


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

        (3) 查找并替换
            s:在末行模式下完成查找替换操作
                s/要查找的内容/替换为的内容/修饰符

                    要查找的内容:可使用模式 -- 注意这里只支持基本正则表达式 BRE
                    替换为的内容:不能使用模式,但可以使用 \1, \2, ... 等后向引用符号;还可以使用"&"引用前面查找时找到的整个内容
                    修饰符:
                        i:忽略大小写
                        g:全局替换;默认情况下,每一行只替换第一次出现

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

    练习:
        1. 复制 /etc/grub2.cfg 至 /tmp 目录,用查找替换命令删除文件中的行首的空白字符

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


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

            :%s/^[[:space:]]/#&/g

    多文件模式: 多个文件一个窗口
        vim FILE1 FILE2 FILE3 ...
            :next       下一个
            :pre        前一个
            :first      第一个
            :last       最后一个

            :wall       保存所有
            :qall       退出所有

    窗口分隔模式: 一个文件一个窗口
        vim -o|-O FILE1 FILE2 ...
            -o:水平分割
            -O:垂直分割

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

    单文件窗口分割: 一个文件多个窗口
        Ctrl + w, s: split      水平分割
        Ctrl + w, v: vertical   垂直分割

    定制 vim 的工作特性
        配置文件:
            全局: /etc/vimrc
            个人: ~/.vimrc        默认不存在,需要用户手动创建

        末行:当前 vim 进程有效

        (1) 行号
            显示: set nu  -- number
            取消显示: set nonu

        (2) 括号匹配
            匹配: set sm  -- showmatch
            取消: set nosm

        (3) 自动缩进
            启用: set ai  -- autoindent
            禁用: set noai

        (4) 高亮搜索
            启用: set hlsearch  -- highlight
            禁用: set nohlsearch

        (5) 语法高亮
            启用: syntax on
            禁用: syntax off

        (6) 语法高亮
            启用: set ic,     -- ignorecase
            禁用: set noic

        获取帮助:
            :help
            :help subject

    问题:如何设置 tab 缩进为4个字符


    练习:
        1. 复制 /etc/rc.d/init.d/functions 文件至 /tmp 目录,替换文件中的 /etc/sysconfig/init 为 /var/log


        2. 删除 /tmp/functions 文件中所有以“#”开头,且#后面至少有一个空白字符的行的行首的“#”号


bash测试
    test EXPRESSION
    [ EXPRESSION ]
    [[ EXPRESSION ]]

    测试表达式的类别:
        数值比较
        字符串测试
        文件测试: 使用 “man bash” 查看帮助,在 1252 行

            存在性测试:
                -a file
                -e file: True if file exists.

            存在性级类别测试:
                -b file: True if file exists and is a block special file.
                -c file: True if file exists and is a character special file.
                -d file: True if file exists and is a directory.

                -f file: True if file exists and is a regular file.
                -h file: True if file exists and is a symbolic link.
                -p file: True if file exists and is a named pipe (FIFO).

                -S file: True if file exists and is a socket.
                -L file: True if file exists and is a symbolic link.

            文件权限测试:
                -r file: True if file exists and is readable.
                -w file: True if file exists and is writable.
                -x file: True if file exists and is executable.

            文件特殊权限测试:
                -g file: True if file exists and is set-group-id.
                -u file: True if file exists and its set-user-id bit is set.
                -k file: True if file exists and its ``sticky'' bit is set.

            文件大小测试:
                -s file: True if file exists and has a size greater than zero.

            文件是否打开:
                -t fd: True if file descriptor fd is open and refers to a terminal.


            其他测试命令:
                -N file: True if file exists and has been modified since it was last read.
                         文件存在并自上一次被读取后是否被修改过,比如使用了重定向命令 >, >>

                -G file: True if file exists and is owned by the effective group id.
                         当前有效用户是否为文件的属组

                -O file: True if file exists and is owned by the effective user id.
                         当前有效用户是否为文件的属主


            双目测试:
                file1 -ef file2: True if file1 and file2 refer to the same device and inode numbers.
                                 FILE1 与 FILE2 是否指向同一个设备上的相同 inode

                file1 -nt file2: True if file1 is newer (according to modification date) than file2, or if file1 exists and file2 does not.
                                 FILE1 是否新于 FILE2

                file1 -ot file2: True if file1 is older than file2, or if file2 exists and file1 does not.
                                 FILE1 是否旧于 FILE2


            例子:判断目录是否存在,不存在则创建目录
                 [ -e /tmp/test ] || mkdir /tmp/test

        组合条件测试:
            逻辑运算:
                第一种方式
                    COMMAND1 && COMMAND2
                    COMMAND1 || COMMAND2
                    ! COMMAND

                    例子:判断文件是否存在并且可读
                        [ -e file ] && [ -r file ]

                第二种方式:
                    EXPRESSION1 -a EXPRESSION2
                    EXPRESSION1 -o EXPRESSION2
                    ! EXPRESSION

                    必须使用测试命令进行

                例子:
                    1. 定义一个本地变量 hostName="hostName",判断 hostName 是否非空,或者等于 “localhost.localdomain”,那么将 hostname 设置为 www.google.com

                        [ -z "$hostName" -o "$hostName"=="localhost.localdomain" ] && hostname www.google.com

                        注意这里判断字符串相等,前后的==号不能出现空格

                    2. 测试 /bin/cat 文件是否存在并且有执行权限,并输出 /etc/fstab 中的信息
                    
                        [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab

你可能感兴趣的:(VIM 编辑器的使用)