7 vim编辑及文件查找

vim编辑器

  文本:纯文本,ASCII text;Unlcode(编码机制)

文本编辑种类:

  行编辑器:sed

  全屏编辑器:nano,vi

  vi:VIsual Interface

  vim:vi IMproved (vi的增强版)

vim:模式化的编辑器

    基本模式:

      编辑模式,命令模式

      输入模式(插入模式)

      末行模式:

        内置的命令行接口

  打开文件:

    vim [options] [file ..]

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

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

      +:表示文件末端

  模式转换:

    编辑模式:默认模式

      编辑模式 --> 输入模式

        i:install,在光标所在处输入

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

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

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

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

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

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

         Esc

      编辑模式 --> 末行模式

         :

      末行模式 --> 编辑模式

         Esc

   关闭文件:

    ZZ:在编辑模式下,保存并退出

    末行模式下:

      :q 退出

      :q!:强制退出,不保存此前的编辑

      :wq  保存并退出

      :x  保存并退出

      :w /PATH/TO/SOMEFILE

    光标跳转:

      字符间跳转

        h:向左

        j:向下

        k:向上

        l:向右

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

      单词间跳转

          w:下一个单词的词首

          e:当前或后一个单词的词尾

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

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

      行首行尾跳转

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

          0:跳转至行首(空白字符可以,但是tab键的空白不可以)

          $:跳转至行尾

      行间跳转

          #G:跳转至由#指定的行
          1G,gg:跳转至第一行

          G:跳转至最后一行

      句间跳转

        )

        (

      段间跳转

        }

        {

    翻屏操作:

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

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

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

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

      Enter:按行向后翻

      

  vim的编辑命令:

    字符编辑

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

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

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

    替换命令:(replace)

      r :替换光标所在处的字符,按r后,需要后面要跟一个要替换成的字符

    删除命令

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

      d$

      d^

      dw

      de

      db

      #d command

      dd:删除光标所在的一整行

      #dd:删除光标所在处的行起始的共#行

    粘贴命令(p,put,paste)

      P:大写P,缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方,否则,则粘贴至当前光标所在处的前方

      p:小写p,缓冲区的内容如果为整行,则粘贴在当前光标所在行的下方,否则,则粘贴至当前光标所在处的后方

    复制命令(yank,y):

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

      y$

      y^

      y0

      ye

      yw

      yb

      #command

      yy:复制一整行

      #yy:表示复制#行

      

  改变命令(change,c):

    编辑模式 --> 输入模式,实现删除操作:

      c$

      c^

      c0

      cb

      ce

      cw

      #command

      cc:删除光标所在的行,并转换为输入模式

        #cc:

 其他编辑操作:

  可视化模式:

      v:按字符选定

      V:按行选定

      结合编辑命令:d,c,y,p

  撤销操作(undo):

    u:撤销此前的操作

    #u:撤销此前的#个操作

  撤销此前的撤销:

    Ctrl+r

  重复执行前一个编辑操作

    .

vim自带的练习教程:vimtutor

vim末行模式:

  内建的命令行接口

  (1)地址定界

      :start_pos[,end_pos]

        #:特定的第#行,例如5即第5行

        .:当前行

        $:最后一行

        #,#:指定行范围,左侧为起始行,右侧为结束行

        #,+#:指定:行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量;例如3,+7

        %:全文

        /pattern/:从光标所在处起始向文件尾部第一次被模式所匹配到的行

          /first/,$

        /pat1/,/pat2/:从光标所在处起始,第一次由pat1匹配到的行开始,至第一次由pat2匹配到的行结束之间的所有行

        可同编辑命令一同使用,实现编辑操作:

          d

          y

          c

          w /PATH/TO/SOMEFILE:将范围内的文本保存至指定的文件中

          r /PATH/FORM/SOMEFILE:将指定的文件中的文本读取并插入至指定位置

  (2)查找

    /PATTERN:从当前光标所在处向文件尾部能够被当前模式匹配到的所有字符串

    ?PATTERN:从当前光标所在处向文件首部能够被当前模式匹配到的所有字符串

      n:下一个,与命令方向相同

      N:上一个,与命令方向相反

  (3)查找并替换

    s:末行模式的命令;使用格式:

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

      要查找的内容:可使用正则表达式

      替换为的内容:不能使用正则表达式,但可以引用

        如果“要查找的内容“部分在模式中使用分组符号:在"替换为的内容"中使用后向引用

        直接引用查找模式匹配到的全部文本,要使用&符号

      修饰符:

        i:忽略大小写

        g:全局替换,意味着一行中如果匹配到多次,则均替换

        可把分隔符替换为其它非常用字符

        s@@@

        s###

        示例:

          %s@<t([[:alpha:]]+)>@T1@g

          %s@<r[[:alpha:]]+>@&er@g

        练习:

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

            :%s@^[[:space:]]+@@  

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

            :%s@^[[:space:]]+@#&

          3.为/tmp/grub2.cfg文件中的前三行的行首加上#号

            :1,3s@^@#&

          4.将/etc/yum.repos.d/Centos-Base.repo文件中所有的enabled=0替换为enabled=1,所有gpgcheck=0替换为gpgcheck=1

            :%s@(enabled|gpgcheck)=0@1=1@g 

  

  vim的多文件功能

    多文件:

      vim file1 file2 ......

       大文件间切换

        :next 下一个

        :prev 上一个

        :first 第一个

        :last 最后一个

      退出所有文件:

        :wqall 保存所有文件并退出

        :wall

        :qall

  多窗口:

    -o:水平分割窗口

    -O:垂直分割窗口

    在窗口间切换:Ctrl+w

    注意:单个文件也可以分割为多个窗口进行查看

      Ctrl+w,s:水平分割窗口  逗号为松开

      Ctrlw,v:垂直分隔窗口 逗号为松开

  定制vim的工作特性:

    注意:在末行模式下的设定,仅对当前vim进程有效

    永久有效:

      全局:/etc/vimrc

      用户个人:./.vimrc

    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 nohisearch

    5、语法高亮

      启用:syntax on

      禁用:syntax off

    6、忽略字符大小写

      启用:set lc

      禁用:set nolc

    获取帮助:

      :help

      :help subject

  课外作业:如何设置tab键缩进4个字符

bash脚本编程之算数运算

  算数运算格式:

    (1)let  VAR=算数运算表达式

    (2)VAR=$[算数运算表达式]

    (3)VAR=$((算数运算表达式))

    (4)VAR=$(expr $ARG1 $OP $ARG2

     注意:惩罚符号在有些场景中需要使用转义符

  练习:写一个脚本,完成如下功能:

    添加三个用户

    求此三个用户的uid之和

    #!/bin/bash

    useradd test1

    useradd test2

    useradd test3

    a=`id -u test1`

    b=`id -u test2`

    c=`id -u test3`

    echo $(($a+$b+$c))

原文地址:https://www.cnblogs.com/self-discipline-xxc/p/10295354.html