文本编辑器:

  文本:纯文本,ASCII text;Unicode;
文本编辑种类:
  行编辑器:sed
  全屏编辑器:nano, vi

  vi: Visual Interface
  vim: Vi IMproved

vim:
  模式化的编辑器

    基本模式:
      编辑模式,命令模式
      输入模式
      末行模式:
        内置的命令行接口;
  
  打开文件:
    # vim [options] [file ..]
      +#:打开文件后,直接让光标处于第#行的行首;
      +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首;

  模式转换:
    编辑模式:默认模式
      编辑模式 --> 输入模式:
        i:insert, 在光标所在处输入;
        a: append,在光标在处后方输入;
        o:在光标所在处的下方打开一个新行;
        I:在光标所在行的行首输入;
        A:在光标所在行的行尾输入;
        O:在光标所在处的上方打开一个新行;

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

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

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

  关闭文件:
    ZZ:保存并退出;

    :q 退出
    :q! 强制退出,不保存此前的编辑操作
    :wq 保存并退出;
    :w, :q
    :x 保存并退出;
    :w /PATH/TO/SOMEFILE

  光标跳转:

    字符间跳转
      h:左
      j:下
      k:上
      l:右

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

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

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

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

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

    句间跳转:
      )
      (

    段间跳转
      }
      {

  翻屏:
    Ctrl+f:向文件尾翻一屏
    Ctrl+b:向文件首部翻一屏
    Ctrl+d:向文件尾部翻半屏
    Ctrl+u:向文件首部翻半屏
    Enter:按行向后翻

vim的编辑命令:

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

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

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

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

    dw:
    de:
    db:
      #COMMAND:

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

  粘贴命令(p, put, paste):
    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

  撤销(undo)操作:
    u:撤销此前的操作;
    #u:撤销此前的#个操作;

  撤销此前的撤销:
    Ctrl+r

  重复执行前一个编辑操作:
    .
vim自带的练习教程:vimtutor

vim末行模式:
  内建的命令行接口

  (1) 地址定界
    :start_pos[,end_pos]
    #:特定的第#行,例如5即第5行;
    .:当前行;
    $:最后一行;
    #,#:指定行范围,左侧为起始行,右侧为结束行;
    #,+#:指定行范围,左侧为超始行绝对编号,右侧为相对左侧行号的偏移量;例如:3,+7
      .,$-1
      1,$
    %:全文
    /pattern/:从光标所在处起始向文件尾部第一次被模式所匹配到的行;
      /first/,$
    /pat1/,/pat2/:从光标所在处起始,第一次由pat1匹配到的行开始,至第一次由pat2匹配到的行结束之间的所有行;

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

    w /PATH/TO/SOMEFILE:将范围内的文本保存至指定的文件中;
    r /PATH/FROM/SOMEFILE:将指定的文件中的文本读取并插入至指定位置;

  (2) 查找
    /PATTERN:从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串;
    ?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串;
    n:下一个,与命令方向相同;
    N:上一个,与命令方向相反;

  (3) 查找并替换
    s:末行模式的命令;使用格式:
      s/要查找的内容/替换为的内容/修饰符
        要查找的内容:可使用正则表达式;
        替换为的内容:不能使用下则表达式,但可以引用;
          如果“要查找的内容”部分在模式中使用分组符号:在“替换为的内容”中使用后向引用;
          直接引用查找模式匹配到的全部文本,要使用&符号;
        修饰符:
          i:忽略大小写;
          g:全局替换,意味着一行中如果匹配到多次,则均替换;

        可把分隔符替换为其它非常用字符:
        s@@@
        s###

    示例:
      %s@\<t\([[:alpha:]]\+\)\>@T\1@g
      %s@\<t[[: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:]]\+[^[:space:]]@#&@g
      3、为/tmp/grub2.cfg文件的前三行的行首加上#号;

      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, ARROW

  注意:单个文件也可以分割为多个窗口进行查看:
    Ctrl+w, s:水平分割窗口
    Ctrl+w, v:垂直分割窗口

定制vim的工作特性:

  注意:在末行模式下的设定,仅对当前vim进程有效;
  永久有效:
    全局:/etc/vimrc
    用户个人:~/.vimrc

  1、行号
    显示:set number, 简写为set nu
    取消显示:set nomber, 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
    :help subject

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

【Linux】【Shell】【text】Vim的更多相关文章

  1. 【Linux下自定义Shell终端提示符】

    目录 基本转义符 字体颜色 背景颜色 移动光标 @ Linux系统终端提示符的特征由系统环境变量 PS1(Prompt String One)定义. 我们可以通过命令echo $PS1来查看当前设置, ...

  2. 【Linux&amp;Unix--open/close/write/read系统调用】

    个人学习整理.如有不足之处,请不吝不吝赐教. 转载请注明:@CSU-Max 系列博文:      Linux&Unix学习第一弹 -- 文件描写叙述符与权限  Linux&Unix学习 ...

  3. 【Linux运维-集群技术进阶】Nginx+Keepalived+Tomcat搭建高可用/负载均衡/动静分离的Webserver集群

    额.博客名字有点长.. . 前言 最终到这篇文章了,心情是有点激动的. 由于这篇文章会集中曾经博客讲到的全部Nginx功能点.包含主要的负载均衡,还有动静分离技术再加上这篇文章的重点.通过Keepal ...

  4. 【linux之设备,分区,文件系统】

    一.设备 IDE磁盘的设备文件采用/dev/hdx来命名,分区则采用/dev/hdxy来命名,其中x表示磁盘(a是第一块磁盘,b是第二块磁盘,以此类推), y代表分区的号码(由1开始,..3以此类推) ...

  5. 【linux之挂载,Raid,LVM】

    一.挂载,卸载 挂载:将新的文件系统关联至当前根文件系统卸载:将某文件系统与当前根文件系统的关联关系移除 cat /etc/mtab 存储着已经挂载的文件系统 (跟 mount 一样) mount:显 ...

  6. 【linux之进程管理,系统监控】

    一.进程管理 前台进程:一般是指占据着标准输入和/或标准输出的进程后台进程:不占据默认开启的进程都是前台进程ctrl+C 中断ctrl+z 从前台转入后台bg 后台进程编号 让其在后台运行ls -R ...

  7. 【python中调用shell命令使用PIPE】使用PIPE作为stdout出现假卡死的情况——将stdout重定向为输出到临时文件

    在Python中,调用:subprocess.Popen(cmd, stdout = PIPE, stderr = PIPE, shell= true)的时候,如果调用的shell命令本身在执行之后会 ...

  8. 【Linux磁盘优化管理--RAID和LVM】

    在现阶段的企业环境中,为了数据的安全性及完整性必须要有一个合理的存储方案.面对着每秒可能产生超过几TB的数据,考虑到磁盘能不能实现 热冗余,及扩容,缩容.Linux给出了RAID(磁盘阵列)以及LVM ...

  9. 【Linux 内核网络协议栈源码剖析】网络栈主要结构介绍(socket、sock、sk_buff,etc)

    原文:http://blog.csdn.net/wenqian1991/article/details/46700177 通过前面的分析,可以发现,网络协议栈中的数据处理,都是基于各类结构体,所有有关 ...

  10. 【linux之链接,函数,随机数】

    一.链接 硬链接(hard link):同一个文件使用了多个别名.新建文件是已经存在的一个别名,,当原文件删除时,新建的文件仍然可以使用.硬链接和原来的文件没有什么区别,而且共享一个inode号.通过 ...

随机推荐

  1. IDEA中Update resources和Update classes and resources、Redeploy、Restart server的区别

    选项 描述 update resources 所有更改的资源都会更新(HTML,JSP,JavaScript,CSS和图像文件) update classes and resources 更改的资源将 ...

  2. buuoj刷题 October

    2019 极客大挑战 web easysql 直接万能密码登就完事了 LoveSQL 万能密码登进去,给了md5,没解出来 手注吧,都要忘了手注怎么注了 猜字段数 3的时候正常不报错 看回显位,2,3 ...

  3. 常见yaml写法-deployment

    apiVersion: extensions/v1beta1 #接口版本 kind: Deployment #接口类型 metadata: name: cango-demo #Deployment名称 ...

  4. 要web开发精品教程吗?免费无广告一百期连讲的那种-逐浪CMS前端开发100期入门教程全面开放

    要web开发精品教程吗?免费无广告一百期连讲的那种-逐浪CMS前端开发100期入门教程全面开放 大师主讲 经验难得 由逐浪CMS首席架构师发哥老师,亲自主理讲解. 历时一年精心打造, 汇聚了互联网诞生 ...

  5. silky微服务框架服务注册中心介绍

    目录 服务注册中心简介 服务元数据 主机名称(hostName) 服务列表(services) 终结点 时间戳 使用Zookeeper作为服务注册中心 使用Nacos作为服务注册中心 使用Consul ...

  6. Hadoop集群 增加节点/增加磁盘

    在虚拟机中新建一个机器. 设置静态IP 将修改/etc/hosts 192.168.102.10 master 192.168.102.11 slave-1 192.168.102.12 slave- ...

  7. Spring Cloud Gateway自定义过滤器实战(观测断路器状态变化)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. [loj2842]野猪

    首先,并不一定走"除了上一次来的边"以外的最短路,但考虑"除了上一次来的边"以外的最短路和次短路(这里的次短路指最后一条边与最短路不同的"最短路&qu ...

  9. [loj3367]装饼干

    先考虑如何判定一个$y$是否可行--从高位开始,记录这一位所需要的$2^{i}$数量$t$,若$y$的这一位为1,则$t+=x$,之后分两类讨论:1.$t\le a_{i}$,令$t=0$:2.$b& ...

  10. Vulnhub-Empire: LupinOne题解

    Vulnhub-Empire: LupinOne题解 本靶机为Vulnhub上Empire系列之LupinOne,地址:EMPIRE: LUPINONE 扫描与发现 利用arp-scan命令扫描靶机I ...