zoukankan      html  css  js  c++  java
  • Linux:Day6(下) vim编辑器

    vim编辑器

      简介:

        vi:Visual Interface,文本编辑器

        文本:ASCII,Unicode

        文本编辑种类:

          行编辑器:sed

          全屏编辑器:nano,vi

        VIM - Vi IMproved

      使用:

        vim:模式化的编辑

          基本模式:命令模式;

          输入模式:

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

        打开文件:

          vim [OPTION]... FILE...   注:vim 后面跟的文件名如果不存在会自动创建一个,但只能是基名不存在。

            +#:打开文件后,直接让光标处于第#行的行首;

              +:打开文件后,直接让光标处于最后一行第一个非空字符处。

            +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首;

        模式转换:

          编辑模式 --> 输入模式:下面这些快捷键也是在编辑模式下有效,键入之后会进入输入模式,模式会转变,当真正转换到输入模式就没用了。

            i:insert,在光标所在处前面插入;

              a:append,在光标所在处后面输入;

            o:在当光标所在处的下方打开一个新行;

            I:在当前光标所在行的行首输入;

            A:在当前光标所在行的行尾输入;

            O:在当光标所在处的上方打开一个新行;

            c:

            C:

          输入模式 --> 命令模式

            ESC

          编辑模式 --> 末行模式

            :

          末行模式 --> 编辑模式

            ESC,想快速回去连敲两次ESC

        关闭文件:

          :q 退出

          :q! 强制退出,丢弃做出的修改;

          :wq 保存退出

          :x 保存退出

          :w /PATH/TO/SOMEWHERE   

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

      光标跳转:下面这些快捷键都是在命令模式下使用的,但使用之后模式不会转变,输入模式下无法实现相关功能。

        字符间跳转:

          h, j, k, l    左,下,上,右

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

        单词间跳转:

          w:下一个单词的词首

          e:当前或下一单词的词尾

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

          #COMMADN:由#指定一次跳转的单词数

        行首行尾跳转:

          ^:跳转至行首的第一个非空白字符;

          0:跳转至行首;

          $:跳转至行尾;

        行间移动:

          #G:跳转至由#指定行;这个是文本的绝对行,并不是从光标向下多少行。例如输入100G,就是定位在100行。

          G:最后一行;

          1G, gg:第一行;

        句间移动:

          )

          (

        段落间移动:

          }

          {

        

    vim的编辑命令:

      字符编辑:

        x:删除光标处的字符;

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

        xp:交换光标所在处的字符及其后面字符的位置;

      替换命令(r,replace)

        r:替换光标所在处的字符;

      删除命令:

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

          d$:删除光标到行尾所有内容,包括光标所在处字符;

          d^:删除光标到行首所有内容,不包括光标所在处字符;

          d0:删除光标到行首所有内容,不包括光标所在处字符;

          dw:删除光标到下一单词词首的所有内容,单词词首处字符不删除;

          de:删除光标到单词词尾的所有内容,包括光标处理字符;

          db:删除光标到单词词首的所有内容,不包括光标处字符;

            #COMMAND:删除指定模式(上面这些模式)的内容;

          dd:删除光标所在处一整行,不保留空行;

          DD:删除光标所在处一整行,保留空行;

            #dd:多行删除,删除光标所在处往下指定多行;

      粘贴命令(p, put, paste):

        p:缓冲区中存储的如果为整行,则粘贴在当前光标所在行的方;否则,则粘贴至光前光标所在处的面;

        P:缓冲区中存储的如果为整行,则粘贴在当前光标所在行的方;否则,则粘贴至光前光标所在处的面;

      复制命令(y, yank):

        y:复制,工作行为相似于d命令:

          y$

          y0

          y^

          ye

          yw

          yb    

            #COMMAND

          yy:复制行

            #yy:复制多行;

      改变命令(c,change)

        c:修改

          编辑模式 -->  输入模式

          c$

          c^

          c0

          cb

          ce

          cw

            #COMMAND

          cc:删除并输入 新内容

            #cc:一次删除多行

    可视化模式:也是在编辑模式下进行的。

      v:按字符选定

      V:按行选定

      Note:经常结合编辑命令;

    撤销此前的编辑:

      u(undo):撤消此前的操作;

        #u:撤销指定次数的操作;

    撤销此前的撤消:

      Ctrl+r

    重复前一个编辑操作:

      .

    翻屏操作:

      Ctrl+f:向文件尾部翻一屏;

      Ctrl+b:向文件首部翻一屏;

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

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

    vim自带的练习教程:

      vimtutor

    vim中的末行模式:

      内建的命令行接口

      (1)地址定界

        :start_pos,end_pos

          #:具体第#行,例如:2表示第2行;

          #,#:从左侧#表示行起始,到右侧#表示行结尾;

          #,+#:从左侧#表示的行起始,加上右侧#表示的行数;

          .:当前行

          $:最后一行

            .,$-1

          %:全文

          /pat1/,/pat2/:从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束;

            #,/pat/

            /pat/,$

        使用方式:

          后跟一个编辑命令

            d

            y

            w /PATH/TO/SOMEWHERE:将范围内的行另存至指定文件中;

            r /PATH/FROM/SOMEFILE:在指定位置插入指定文件中的所有内容;

      

      (2)查找

        /PATTERN:从当前光标所在处向文件尾部查找;后面不用空格直接加c不区分大小写搜索;

        ?PATTERN:从当前光标所在处向文件首部查找;

          n:与命令同方向;

          N:与命令反方向;

        搜索使用后,不想让搜索词一直高亮,在末行模式:noh

      (3)查找并替换

        s:在末行模式下完成查找替换操作     注:s后面有分隔符别忘了。

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

            要查找的内容:可使用模式,默认支持基本正则表达式

            替换为的内容:不可使用模式,但可以使用1,2,...等后向引用符号;还可以使用&引用前面查找时查找到的整个内容;

            修饰符:

              i:忽略大小写

              g:全局替换,默认情况下,每一行只替换第一次出现;

              例如:.,$s/r(..)t/R1T/g

                 %s/l...x/&er/g

                 %s//etc/fstab//var/log/g

            查找替换中的分隔符/可替换为其它字符,例如:

              s@@@

              s###

              %s@/var/log@/etc/fstab@g

    练习:

      1、复制/etc/grub2.cfg至/tmp/目录,用查找替换命令删除/tmp/grub2.cfg文件中的行首的空白字符;  %s/[[:space:]]//g

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

      

     多文件模式:

      vim FILE1 FILE2 FILE3 ...

        :next  下一个

        :prev  前一个

        :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 number,简写为set nu

        取消显示:set nonumber,简写set nonu

      (2)括号匹配

        匹配:set showmatch,简写为set sm

        取消:set nosm

      (3)自动缩进

        启用:set ai

        禁用:set noai

      (4)高亮搜索

        启用:set hlsearch

        禁用:set nohlsearch

      (5)语法高亮

        启用:syntax on

        禁用:syntax off

      (6)忽略字符大小写

        启用:set ic

        不忽略:set noic

      获取帮助:

        :help subject

    练习:

      1、复制/etc/rc.d/init.d/function文件至/tmp目录;替换/tmp/functons文件中的/etc/sysconfig/init为/var/log;

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

    bash条件测试:

      测试方式:

        test EXPRESSION

        [ EXPRESSION ]

        [[ EXPRESSION ]]

      测试表达式的类别:

        数值比较

        字符串测试

        文件测试:

          存在性测试:

            -a FILE

            -e FILE:文件存在性测试,存在为真,否则为假;

              [ -e /etc/grub2.cfg ]

          存在性类别测试:

            -b FILE:是否存在且为块设备文件;

            -c FILE:是不存在且为字符设备文件;

            -d FILE:是否存在且为目录文件;

            -f FILE:是否存在且为普通文件;

            -h FILE 或 -L FILE:存在且为符号链接文件;

            -p FILE:是否存在且为命令管道文件;

            -S FILE:是否存在且为套接字文件;

          文件权限测试:

            -r FILE:是否存在且可读;

            -w FILE:是否存在且可写;

            -x FILE:是否存在且可执行;

          文件特殊权限测试:

            -g FILE:是否存在且拥有sgid权限;

            -u FILE:是不存在且拥有suid权限;

            -k FILE:是否存在且拥有sticky权限;

           文件大小测试:

            -s FILE:是否存在且非空;

          文件是否打开:

            -t fd:fd表示文件的描述符是否已经打开且与某终端相关;

            -N FILE:文件自动上一次被读取之后是否被修改过;

            -O FILE:当前有效用户是否为文件属主;

            -G FILE:当前有效用户是否有文件属组;

          双目测试:

            FILE1 -ef FILE2:FILE1与FILE2是否指向同一个设备上的相同inode

            FILE1 -nt FILE2:FILE1是否新于FILE2;

            FILE1 -ot FILE2:FILE1是否旧于FILE2;

      

      组合测试条件:

        逻辑运算:

          第一种方式:

            COMMAND1 && COMMAND2

            COMMAND1 || COMMAND2

            ! COMMAND

            [ -e FILE ] && [ -r FILE ]

          第二种方式:

            EXPRESSION1 -a EXPRESSION2

            EXPRESSION1 -o EXPRESSION2

            ! EXPRESSION

            必须使用测试命令进行:

          # [ -z "$hostName" -o "$hostName"=="localhost.loacldomain" ] && hostname www.magedu.com

          # [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab

        

  • 相关阅读:
    智能聊天机器人——基于RASA搭建
    十分钟学会写shell脚本
    浅谈并发并行异步同步
    C/S系统实现两数求和(非阻塞+epoll+心跳包检测用户在线状况+滚动日志+配置文件.)
    编程之美第一篇 01分数规划
    欧拉函数
    奇妙的算法之LCS妙解
    N种方法妙讲LIS算法
    基于FeignClient提供简单的用户查询服务
    SpringCloud简介
  • 原文地址:https://www.cnblogs.com/sq5288/p/9651265.html
Copyright © 2011-2022 走看看