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:从当前光标所在处向文件尾部查找;

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

      n:与命令同方向;

      N:与命令反方向;

  (3)查找并替换

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

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

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

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

        修饰符:

          i:忽略大小写

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

          例如:.,$s/r\(..\)t/R\1T/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

    

Linux:Day6(下) vim编辑器的更多相关文章

  1. 【转】Linux上vi(vim)编辑器使用教程

    Linux上vi(vim)编辑器使用教程 ------------------------------------------------------------ ikong ------------ ...

  2. Linux系统Vi/Vim编辑器的简单介绍、安装/卸载、常用命令

    Linux系统Vi/Vim编辑器的简单介绍.安装/卸载.常用命令 1.介绍 vi(Visual Interface)编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下.由于不需要图形界 ...

  3. Windows & Linux 安装使用 Vim 编辑器 3分钟入门 - 精简归纳

    Windows & Linux 安装使用 Vim 编辑器 3分钟入门 - 精简归纳 JERRY_Z. ~ 2020 / 8 / 25 转载请注明出处! 目录 Windows & Lin ...

  4. linux下vim编辑器查找 关键字

    在  linux  vim 编辑器 下查找   关键字 方法[一] 1?short_open_tag : 它的意思是vim 打开文件的第一行 ? : 它的意思是反向查找 short_open_tag ...

  5. Windows下安装 Linux 下vim编辑器

    Windows下安装vim编辑器 下载传送门 https://vim.en.softonic.com/download# 开始安装 这是下载后的可执行文件 双击(或单击)运行软件,选择同意继续进行安装 ...

  6. Linux下Vim编辑器访问系统剪切板

    默认情况下VIM使用的是内置的寄存器,而不是X Window的剪切板 启用系统剪切板支持 可以使用vim --version | grep clipboard查看,若clipboard前显示-标记,而 ...

  7. Linux上vi(vim)编辑器使用教程

    vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率.vi是“visual interface”的缩 ...

  8. 【Linux 操作系统】vim编辑器配置及常用命令

    最近工作不安分, 没有了刚入行时候的锐气, 不知道什么时候开始懈怠起来, 周末在电脑旁边看新闻, 搞笑图片, 追美剧, 一坐就是一天, 很是空虚. 我需要摆脱这种状态, 正好想学习一下安卓底层, An ...

  9. Linux之vi/vim编辑器

    1.概述 所有的Unix like系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在,但是目前我们使用比较多的是 vim 编辑器. vim具有程序编辑的能力,可以主动地以字体颜色辨别语法的 ...

随机推荐

  1. jQuery 练习:取出数组字典的值, 静态对话框, clone方法应用

    jQuery 中文API文档 http://jquery.cuishifeng.cn/ jQuery 取出数组字典的值 <head> <meta charset="UTF- ...

  2. 微信小程序调用地图选取位置后返回信息

    先看一下wxml的代码,绑定个事件! <view class='carpool_data_all'> <view class='aa'> <text>*出发地< ...

  3. Vue2+VueRouter2+webpack 构建项目实战(二):目录以及文件结构

    通过上一篇博文<Vue2+VueRouter2+webpack 构建项目实战(一):准备工作>,我们已经新建好了一个基于vue+webpack的项目.本篇文章详细介绍下项目的结构. 项目目 ...

  4. cf1139D. Steps to One(dp)

    题意 题目链接 从\([1, M]\)中随机选数,问使得所有数gcd=1的期望步数 Sol 一个很显然的思路是设\(f[i]\)表示当前数为\(i\),期望的操作轮数,转移的时候直接枚举gcd \(f ...

  5. Python 一键上传下载&一键提交文件到SVN入基线工具

    一键上传下载&一键提交文件到SVN入基线工具   by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用说明 1   注: 根据我司项目规则订制的一套工具,集成以下功能,源码 ...

  6. View体系第二篇:View滑动

    View滑动的基本思想:当点击事件传到View时,系统记下触摸点的坐标,手指移动时系统记下触摸后的坐标并计算出偏移量,然后根据偏移量修正View坐标. 实现View滑动共有6种方法:layout()方 ...

  7. Wu反走样算法绘制圆(C++/MFC实现)

    Wu反走样圆 原理:参考Bresenham算法,在主位移过程中计算出离理想圆最近的两个点,赋予不同的亮度值,绘制像素点即可! MFC 中CXXXView类中添加函数: //Wu算法画反走样圆 void ...

  8. Android 如何解决dialog弹出时无法捕捉Activity的back事件

    Android 如何解决dialog弹出时无法捕捉Activity的back事件 在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到b ...

  9. python之restful api(flask)获取数据

    需要用到谷歌浏览器的扩展程序 Advanced Rest Client进行模拟请求 1.直接上代码 from flask import Flask from flask import request ...

  10. win10 出现0x80072efd错误

    0x80072efd 0x80072efd 是网络问题,windows更新或windows应用商店出现0x80072efd问题,请检查本机代理,是否开着小飞机(Shadowsocks)之类的代理工具. ...